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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
教育用(?)プログラムPascalの宿題をやって頂くスレ

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

【本家】

http://www.borland.co.jp/delphi/

【関連スレ】

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

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

【Delphi初心者】今から始めるDelphi Part01
http://pc5.2ch.net/test/read.cgi/tech/1062422335/l50
Tubo Pascal のコンパイラを違法コピーした人の数→(503)
FreePascalはOK?
4デフォルトの名無しさん:04/07/13 20:58
>>3
面倒なので、FreePascalは関連スレのどこか逝け。
>>1
今時 Pascal の宿題なんてあるの?
6デフォルトの名無しさん:04/07/13 21:01
>>5
あるとこはあるみたいだな。
Pascalは初心者スレで宿題もやってたわけなんだが。

******Programming Language Pascal******
http://pc5.2ch.net/test/read.cgi/tech/1078885169/l50
ウルトラマンコ
スモス
誰かいますか?宿題あるんですがいいですか?
>>9
チャットじゃないんだから書くだけ書いとけば?
整数型の配列で、配列名CTab、配列要素n個、を定義して、


@ 各要素にデータを格納する。
A 配列CTabの要素の合計と平均(小数第1位まで)、最大値と最小値を求めて表示する。

※配列要素の数は、定数Constでnに適当な値を設定できるようにすること。

※プログラムは「終わりますか?」と表示して「y」を入力したらプログラムを終了するように繰り返すこと。
1211:04/07/13 21:49
>>10
そうですね。どなたかお願いします。
提出日迫ってて焦ってます。
const
n = ...;
var
CTab : array [1..n] of interger;
begin
repeat
kakunou;
hyouji;
until owarimasuka;
end.
1411:04/07/13 22:13
>>13
それは違うと思います。。。
const
 n = ...;
var
 CTab : array [1..n] of interger;
begin
 Nis?

 repeat
  kakunou;
  hyouji;
 until owarimasuka;
end.
1611:04/07/13 22:27
>>15
えっと、真面目にお願いします(汗)
>>16
これが何故ふざけてるよう見えるんだよヽ(`Д´)ノ
思いっきり答えじゃん
>>13>>15は別人
1811:04/07/13 22:38
>>17
入れても起動しないのですが・・・
まず最大値と最小値を求めるプログラム入ってませんよね・・・
あとowarimasukaとか定義されてないのにuntilの後に入ってますし・・・
あとPascalで?とか使うの初めてみたのですが・・・
1911:04/07/13 22:40
あとエラーが6つくらい出てます・・・
ここまで書いてもらったら、あとは自分で組めるだろ
2111:04/07/13 22:41
>>20
組めません・・・すみません・・・
>>18
起動するわけないぽ・・・
2311:04/07/13 22:43
>>22
・・・
>>23
キーボードから入力させる方法はわかる?
2511:04/07/13 22:45
>>24
どういうことでしょうか?
procedure kakunou;
var
i : integer;
begin
for i := 1 to n do
...;
end;
2711:04/07/13 22:48
>>26
馬鹿で申し訳ないです・・・
誰かpascalの入門サイト紹介してやれ

とりあえず、いいところか知らんが
http://or-lab.asahi-u.ac.jp/intro_to_delphi/default.htm
http://www.geocities.co.jp/SiliconValley-SanJose/2560/delphi4/beginner/tutor.htm
2911:04/07/13 22:49
>>26
まとめてお願いできますでしょうか?
3011:04/07/13 22:49
>>28
放置しないで下さい・・・
>>11
Pascalさわり始めて何週間でつか?
>>11
2chチェックしてる暇あったら勉強しろ!
条件分岐と繰り返しだけなら数時間で身につく
そして、それだけで問題とける
3311:04/07/13 22:53
>>31
触り始めたのは2ヶ月前です。
授業でもやりましたが、何度か欠席してしまいまして・・・
あと、人のせいにするのも何ですが・・・
うちの教授教えるの下手くそなんです・・・。

課題はあさってには提出しないといけないし・・・
あとこれ含めて3問もあるんですよ(泣)
今から勉強したら間に合わないし・・・

上の関連スレのとこにある。くだスレで1つ教えて貰って
今日やっといろいろ調べて1個完成したんです;;
>>33
あれ完成したんだったらこの問題も応用だよ
3511:04/07/13 22:56
>>32
他の課題もやらにゃならんのです・・・
だから人の手借りてます・・・
3611:04/07/13 22:57
>>34
あれは整形してあったので、少し変えればいいことに気づきました・・・
でもこれは・・・何をどこに当てはめればいいのやら・・・
const
 n = ...;
var
 i : integer;
 CTab : array [1..n] of interger;
begin
 ユーザーにNの値を決めさせる

 for i := 0 to n do
 begin
  入力させる
  入力された値を CTab[i] に格納
  ”終わりますか?”と表示
  入力させてyならループから脱出
 end;

 結果表示
end.
3811:04/07/13 23:06
>>37
ありがとうございます。
やってみます。
>>38
答え丸投げしてもらったほうが楽なんだろうけど、
今の段階では時間がかかってもいいから聞きながらやったほうがいいよ
まあガンガレ
4011:04/07/13 23:10
>>39
そうですね。
今楽したら後でできなくなりますよね。
そこまで考えてくれてありがとうございます。
やってみます。
4111:04/07/13 23:11
あと私の使っているのはDelphi6なんですが・・・
4311:04/07/13 23:19
const
const= ...;
var
i:integer;
CTab : array [1..n] of string;

{一時停止用変数}
x:string;
begin
writeln;
write('値を決めて下さい====>');
writeln;

for i := 0 to n do
begin

CTab[i]:='格納';

ここまで出来ましたがどうでしょうか?
CTabにString入れてどうすんだよ…
根本から間違えてるぞ
45デフォルトの名無しさん:04/07/13 23:47
うーん、先は遠いな。 自己解決できるのか?
この手のスレで教育するとは、教えてる人偉いよ。マジで。
漏れなら即丸投げだな。
46デフォルトの名無しさん:04/07/14 00:00
>うちの教授教えるの下手くそなんです・・・。
たぶんそれ以前の問題だ。超基本だぞ。
>>32のいうとおり真面目に勉強すれよ。
丸投げ希望になったらそう書け。
>>43
明日の夜までは丸投げなしの方向でがんばれ
4811:04/07/14 00:49
>>44
エラーでそうでたんです(汗)
えと、丸投げ希望です・・・ぐちゃぐちゃになっちゃいました(汗)
4911:04/07/14 00:50
>>47
明日の夜は課題終わらせてないといけないので・・・
これ含めてあと3つなので
今日は最低でも2つは終わらせないといけないんです。
>>43
writeln;
write('値を決めて下さい====>');
writeln

この後にユーザーにNの値を入力させないと
5111:04/07/14 00:51
あとこれ意外にもこのプログラムのアルゴリズムとか書かないといけなくて・・・(汗)
5211:04/07/14 00:52
>>50
readln(i);
ですね。
>>52
>※配列要素の数は、定数Constでnに適当な値を設定できるようにすること。
読み込み先は i じゃなくてnだよ
このプログラムはnに入力された回数だけループする
5411:04/07/14 00:58
[エラー] s4.dpr(10): 識別子 が必要な場所に 'CONST' があります
[エラー] s4.dpr(13): 未定義の識別子 : 'n'
[エラー] s4.dpr(21): Read/Readln 文に正しくない型が渡されました
[エラー] s4.dpr(24): 'Integer' と 'Array' には互換性がありません
[エラー] s4.dpr(31): 'END' が必要な場所に 'UNTIL' があります
[エラー] s4.dpr(32): 'UNTIL' が必要な場所に 'END' があります
>>54
>>37のuntil使わないほうが楽だよ
とりあえず途中まで書いてみるわ
トイレから復帰

const
 n = 0;
var
 i: integer;
 CTab: array [1..n] of string;
 s: string;
begin
 write('繰り返し回数を決めて下さい');
 readln(n);

 for i := 1 to n do       //n回繰り返す。nが10なら10回
 begin
  readln(CTab[i]);       // i の値は1回目のループ時は1、10回目なら10
  write('終了しますか? [Y]');
  readln(s);          //とりあえずsに入れる
  if s = 'y' then break;   //sの中身が'y'ならループから脱出
 end;

 ここで最大値とか平均とか表示
end;
5711:04/07/14 01:21
整数型の配列で、配列名STab、配列要素20個を定義して、  
@ 各配列要素に数値データを格納する。
A 並べ替える前の要素を横一列に表示する。
B 配列STabの要素を値の小さい順(昇順:Ascending)に並べ替える。
C 並べ替えた後の要素を横一列に表示する。

配列STab @の実行後

3  37 947・・・・・・・・2 16
STab(1) STab(2) STab(3) STab(4) ・・・・・・・・・ STab(19) STab(20)

配列Stab Bの実行後

2  3  916・・・・・・・・37 47
STab(1) STab(2) STab(3) STab(4) ・・・・・・・・・ STab(19) STab(20)

★並べ換えは、つぎのようにして行なう。
  @1番目の要素から20番目の要素のうちで最も小さいものを選び、これを1番目におく。
  A2番目の要素から20番目の要素のうちで最も小さいものを選び、これを2番目におく。
  B3番目から20番目まで、4番目から20番目まで・・・と同じよう行う。
  C19番目と20番目で小さい方を19番目の要素におくと、並べ換えは終了である。
  ★プログラミングは、まず要素の数が20の配列に整数値を入力して、20個格納してから上に示した方法で並べかえる。
並べ換えた結果は、横一列に表示する。
5811:04/07/14 01:23
>>56
こ・・・これは良くわかります!
激しくありがとうです。

>>57はもう一つの課題でめちゃくちゃむつかしいです・・・
5911:04/07/14 01:28
>>57は完全丸投げでお願いします(汗)
60デフォルトの名無しさん:04/07/14 01:28
>>58
やってみるけどブサイクなプログラムになりそうなのでageてみる(;´Д`)
キレイにかける人よろ
単なるソートでしょ?
手元でトランプでも並び替えてみて、何が必要か考えるがよろし
6211:04/07/14 01:32
あとは神っぽいプログラムがあるのでつが・・・
これはもう・・・初心者にやらせるのは間違ってると思いまつ。
あとでつね、私の習った範囲ではブサイクなプログラムの方が提出しやすいでつ。
どうもありがとうございますm(_ _)m
6311:04/07/14 01:41
const
n = 0;
var
i,min,max:integer;
CTab: array [1..n] of string;
s: string;

{一時停止用変数}
x:string;

begin
max:=0;
min:=i;
write('繰り返し回数を決めて下さい');
readln(n);
for i := 1 to n do
begin
readln(CTab[i]);
write('終了しますか?する場合は【y】と入力して下さい');
readln(s);
if s = 'y' then break;
end;
6411:04/07/14 01:43
begin
if(max<n) then max:=n
else
if(min>n) then min:=n;
end;
writeln('最大値=',max,'最小値=',min,');

【エラー】
[エラー] s4.dpr(13): 下限値が上限値を超えています
[エラー] s4.dpr(23): 代入できない左辺値です
[ヒント] s4.dpr(24): 一度も実行されない for/while ループがあります - 削除しました
[エラー] s4.dpr(41): 文字列が正しく終わっていません
[エラー] s4.dpr(43): ',' または ')' が必要な場所に 識別子 'writeln' があります
6511:04/07/14 01:44
問題が多いです・・・
横から悪いんだが、>>11を読む限り、readln(n);は要らないというかconstならそもそもできないと思うんだが…
6711:04/07/14 01:45
誤所を指摘して頂けると嬉しいです。
constで宣言するのは定数だから、ReadLnで値を外部から上書きなんてのは最初からできんのです。
つまり
>※配列要素の数は、定数Constでnに適当な値を設定できるようにすること。
ってのは、
const n = 0;
のところを、後からそこだけ5でも10でも100でも適当に変えても動くようにしろって事と思われるのです。
6911:04/07/14 01:57
>>63-64
にあげた書き方で誤所修正して貰えませんでしょうか?
7011:04/07/14 02:01
配列STab @の実行後

3      37   9    47   ・・・・・・・・   2     16
STab(1) STab(2) STab(3) STab(4) ・・・・・・・・・ STab(19) STab(20)

配列Stab Bの実行後

2      3    9     16  ・・・・・・・・   37    47
STab(1) STab(2) STab(3) STab(4) ・・・・・・・・・ STab(19) STab(20)

>>57
の訂正です。
7111:04/07/14 02:03
const
n = 0;
var
i,min,max:integer;
CTab: array [1..n] of string;
s: string;

{一時停止用変数}
x:string;
7211:04/07/14 02:04
begin
max:=0;
min:=i;
write('繰り返し回数を決めて下さい');
readln(n);
for i := 1 to n do
begin
readln(CTab[i]);
write('終了しますか?する場合は【y】と入力して下さい');
readln(s);
if s = 'y'
then break;
end;
begin
if(max<i)
then
max:=i
else
if(min>i)
then
min:=i;
end;
writeln('最大値=',max,'最小値=',min,');
7311:04/07/14 02:04
[エラー] s4.dpr(13): 下限値が上限値を超えています
[エラー] s4.dpr(23): 代入できない左辺値です
[ヒント] s4.dpr(24): 一度も実行されない for/while ループがあります - 削除しました
[エラー] s4.dpr(41): 文字列が正しく終わっていません
[エラー] s4.dpr(43): ',' または ')' が必要な場所に 識別子 'writeln' があります

少し訂正しましたが、まだエラーが・・・
このエラーがどうしても直せません・・・
誤所ってあーた…エラーメッセージまんまじゃ…

まず、
>[エラー] s4.dpr(13): 下限値が上限値を超えています

>CTab: array [1..n] of string;
でしょ?行番号の対応わかりませんけど。
複数の値を入力させて配列に記録するという課題の性質上、n = 0ってのがまずありえない。
Pascalの配列として考えても、n = 0なら[1..0]になるわけで、これもありえない。
よってconst n = 0; を、適当な正の値にしとく。

そうすればエラーメッセージは減るだろうから、もうちょい自分の手を動かしてみた方がいいでしょ。
7511:04/07/14 02:14
>>74
すごいです!
エラー3つになりました!
完成まであとちょっとです!
7611:04/07/14 02:16
[エラー] s4.dpr(23): 代入できない左辺値です
[エラー] s4.dpr(41): 文字列が正しく終わっていません
[エラー] s4.dpr(43): ',' または ')' が必要な場所に 識別子 'writeln' があります

ですね。

代入できない左辺値・・・
7756:04/07/14 02:16
writeln('最大値=',max,'最小値=',min,');
minの後ろの ' これ削除'
7811:04/07/14 02:20
>>77
2個になりました!
7911:04/07/14 02:20
[エラー] s4.dpr(23): 代入できない左辺値です
[エラー] s4.dpr(41): 式 が必要な場所に ')' があります
後はまあ、const n = ...のところでnの値を決めてる以上、readln(n)は無意味と理解できれば
>>68の意味もわかってもらえると思うのですが
8111:04/07/14 02:22
[エラー] s4.dpr(40): 式 が必要な場所に ')' があります

>>80
それは理解できました。
82デフォルトの名無しさん:04/07/14 03:32
>>57
var
STab: array[0..19]of integer;
i, m, iValue, index: integer;
begin
for i:=Low(STab) to High(STab) do Readln(STab[i]); // 入力受け付け
for i:=Low(STab) to High(STab) do Write(Stab[i],#9); //要素表示
Writeln;
for i:=Low(STab) to High(STab) do //ソート
begin
iValue:= STab[i];
index:= i;

for m:=i+1 to High(STab) do
if STab[m] < iValue then
begin
iValue:= STab[m];
index:= m;
end;

STab[index]:= STab[i];
STab[i]:= iValue;
end;

for i:=Low(STab) to High(STab) do Write(Stab[i],#9); //要素表示
Writeln;

Readln; //(入力確認用)
83デフォルトの名無しさん:04/07/14 03:44
>>81
writeln('最大値=',max,'最小値=',min,');
minの後ろ ","削除

エラーが出たなら")"の近辺見直すくらいしようや。
あとmaxとminは関数名だから別の名前のほうがいいと思われ。
84デフォルトの名無しさん:04/07/14 12:10
>>11 丸投げじゃないよ。参考にして書き換えなさい。

const
 n = 3;
var
 CTab: array[1..n]of integer;
 Sum_i, Max_i, Min_i, i: integer;
 C: Char;
begin
 Sum_i:= 0;
 Max_i:= Low(integer);
 Min_i:= Maxint;

 for i:=1 to n do
 begin
  Write('整数入力');
  Readln(CTab[i]);

  Inc(Sum_i, CTab[i]);
  if Max_i < CTab[i] then Max_i:= CTab[i];
  if Min_i > CTab[i] then Min_i:= CTab[i];

  Writeln('Sum: ',Sum_i);
  Writeln('Ave: ',Sum_i /i :1:1);
  Writeln('Max: ',Max_i);
  Writeln('Min: ',Min_i);
  Write('終わりますか?');
  Readln(C);
  if C = 'y' then break;
 end;
提出日前日にサーバーが超不安定
かわいそうすぎるぞ>>11
86デフォルトの名無しさん:04/07/15 22:12
>>11読んでないのかなー?
待望の >>82丸投げ& >>84ほとんど丸投げ出てるのに。
ありがとう。本当にPascaりました。
88デフォルトの名無しさん:04/07/15 23:55
おおっ!>>84から書き換え成功したようですね。
ま、あれはあれでそのまま動くものでしたが。
89デフォルトの名無しさん :04/07/21 19:43
(ルートc)の近似値を求めるプログラムを二分法で作ってください。
pascalでお願いします。


90デフォルトの名無しさん:04/07/21 23:31
パスカルじゃないならこんなモノが。
http://www.math.kobe-u.ac.jp/~taka/asir-book-html/main/node35.html
92デフォルトの名無しさん:04/09/05 09:52
9801(9821)プリンタポートへの出力についてですが、

port[$40]:=$01;
これは実行結果OKで、出力ポートの最下位ビットがHになりました。 
次に、
port[$42]:=s;
writeln(s);

で、CRT画面にport42Hの状態を画面表示できると考えているのですが
実行した結果は、そうなってないような感じです。
書式が根本的に間違っているのでしょうか?
Turbo Pascalのバージョンは98版6.0です。
宜しくご教授のほどお願いします。
ポートが読めるかどうか知らないけど、それ以前に
>port[$42]:=s;
s := port[$42] ではないの?
94デフォルトの名無しさん:04/09/06 00:01
>93
すんません、あとで気が付いて直したらOKでした。(^^+
PC-98用のTurbo Pascalくださいお願いします
96デフォルトの名無しさん:04/09/22 15:54:31
program(output);

 writeln('ねこみみ、かわいい??!');
end.
97デフォルトの名無しさん:04/10/16 00:52:32
最小文字数のプログラムを作るにはどうすればいいですか?

program;(imput,output)
begin
end.

とやって他には何をいれればエラーが出ないようになります?
98デフォルトの名無しさん:04/10/16 11:24:53
program A(input,output);
begin
end.
じゃないか?
Delphiなら begin end. だけでも通るけどさ
9997:04/10/16 12:36:46
(input,output)
は入れる必要ってあります?
あとwriteとwritelnのちがいを教えてください。
100デフォルトの名無しさん:04/10/16 13:14:46
Pascalによっては、標準入出力を意味する(input,output)の代わりにファイルを書けたりしたよーな気もするが
大抵の処理系では(input,output)は単に無視されるので無くてもいいかな
writelnはwriteに加えて改行する
101デフォルトの名無しさん:04/10/16 22:10:53
>>99
入出力が無いなら(input,output)は不要なはず。
出力だけのプログラムの場合、(output)だけの
こともあ。
102101:04/10/16 22:20:56
修正途中で書き込んでしまった。

出力だけのプログラムの場合、(output)だけの
こともある。

と書くつもりだった。

>>100
仕様で「ファイル名なんかの受け渡しを、この
パラメータを介して行う」となっているから、その
処理系は正しく実装しているのかも。

BNFでは
  <プログラムの頭書き> ::= program <名前>
  ( <ファイル名> {, <ファイル名> } );
って書いてある。
10397:04/10/17 19:38:30
>>98 100〜102
ありがとうございました。
大学でpascalの授業が始まったんですが
かなり説明不足な授業やらかされてるんで
助かります。
104デフォルトの名無しさん:04/11/28 05:42:23
情報落ちを防ぐための和のプログラムはどのようにかけばいいんでしょうか?
105デフォルトの名無しさん:04/11/28 07:04:51
>>104:
案1:絶対値の小さい順に足す。
案2:足したけど足せなかった分を管理する。

『アルゴリズム辞典』のPascal版、C言語版、Java版どの本でも載ってたはず。
106デフォルトの名無しさん:04/11/28 07:18:33
解答ありがとうございます。もっとよく調べてみます。
107デフォルトの名無しさん:04/12/04 17:03:31
4桁のある自然数をストリングに詰めることを考えています。
まずは面倒ですがmodを駆使してそれぞれの桁の数字を取り出し、
それぞれをif (1keta = '1') then arry[1] = '1';
を延々と繰り返すのですが、
ここでは
if (1keta = '1') then arry[1] = '1'
else if (1keta = '2') then arry[1] = '2'
else if (1keta = '3') then arry[1] = '3'
以下略 のようにelse ifの方が演算コストは少ないですが
case文と比べるとどちらのほうが早いのでしょうか。
case文、switch文はジャンプアドレス表というものを使い
ifとは異なり一気に飛べる分にコストが低いと聞きました。

if文を使うとしたらクイックソートのように
5以上→7以上→9か8か7か
 →6か5か
5未満→3以上か→4か3か
 →2か1か0か
とするつもりです。
単純に0から順に調べると平均比較回数が5.5で、上記では3.6となるようです。
108107:04/12/04 17:34:13
なんでそんなことをわざわざ気にかけるの、と言われそうなので
先回りして答えますと、
プログラム自体は単純なradixソートを1万個の数に対して行う事なので
integerをstringに変える部分のコストがどうしても無視できないのです。

今までもifにしようかcaseにしようか何度も迷ってきたので
後学のためにも、きちんと理解しておきたいなとも思いますです。
109デフォルトの名無しさん:04/12/04 18:01:50
>>107
Chr(Ord('0') + n)でいいじゃん
数字が文字コード上で並んでいることが前提だけど、そうじゃない文字コード体系なんてあるまい
110105:04/12/04 22:14:45
Pascalの規格上は数字コードは連続してますよ。
アルファベットは保障されてないけど。

>>107
一桁ずつ数値のまま比較するのは×なの?
111デフォルトの名無しさん:04/12/04 23:51:21
べつに連続してなくても表引きにすればいいじゃん。
112デフォルトの名無しさん:04/12/07 11:49:18
n*nの正方行列の積を求めるプログラムを作りなさい
113デフォルトの名無しさん:04/12/07 13:02:00
>>112
Jensen and Wirth を書きうつせばいい?
114デフォルトの名無しさん:04/12/07 19:41:21
非負整数を受け取って10の位と1の位の数を返す手続きを作りたいんですけどどうすればいいですか?
115デフォルトの名無しさん:04/12/08 15:39:35
98465

98465 mod 100= 65
65 div 10 =6
65 mod 10 =5
116デフォルトの名無しさん:04/12/10 19:49:33
>>112
俺ハケーン!
117デフォルトの名無しさん:04/12/13 11:06:00
お願いします☆
(課題)
入力されたn個の数を大きい順に並び替えるプログラムを作れ。
(他のスレにも書き込んだけどまだわからなかったので)

118デフォルトの名無しさん:04/12/13 12:58:04
btreeでぐぐれ
119デフォルトの名無しさん:04/12/13 15:17:39
二分木で記録していくか、配列に記録しておいて表示前にソートか
120デフォルトの名無しさん:04/12/14 23:53:55
とりあえず選択ソートでどう?
あとはn個だけに対応するように書き換えればいいでしょう。

procedure SelectionSort(var List: array of integer);
var
 i, m, u_value, u_index, ListHigh: integer;
begin
 ListHigh:= High(List);

 for i:=Low(List) to ListHigh-1 do
 begin
  u_value:= List[i];
  u_index:= i;

  for m:=i+1 to ListHigh do
  begin
   if List[m] < u_value then
   begin
    u_value:= List[m];
    u_index:= m;
   end;
  end;

  List[u_index]:= List[i];
  List[i]:= u_value;
 end;
end;
121デフォルトの名無しさん:04/12/16 15:44:45
1桁以上の数字、*、/、+、-、= の各文字で構成された式を読み、
計算値を出力する電卓のプログラムを作成せよ。
ただし、 低機能な電卓と同様に 演算子 *, / と +, - の優先順位は対等とする。
また、/ は整数除算の演算子とし、 余分な空白などの不正な入力に対して配慮する必要はない。

なお、 読み込んだ値を計算式内で直接利用するために、
手続き read で読み込んだ整数値を関数値として返す関数 getnumber を作成し、
これを利用したプログラムとすること。

た す け て

た す け て
122デフォルトの名無しさん:04/12/16 15:56:17
↑ マルチ
123デフォルトの名無しさん:04/12/16 16:35:25
open(IN,"./charalog/$winner[0].cgi")
@chara2 = <IN>;
close(IN);

open(IN,"./kati/w_ranking.cgi")
@wrank = <IN>;
close(IN);

この文おかしいですか?
124デフォルトの名無しさん:04/12/16 16:47:01
>>123
あなたはそれがPascalだとでも言い張るのですか?
125デフォルトの名無しさん:04/12/17 00:58:36
>>122
他にどこに書いてある?
126デフォルトの名無しさん:04/12/17 02:06:59
>>121
ほれ。GetNumberは手続きだったりするがね(w
>ttp://www.ced.is.utsunomiya-u.ac.jp/lecture/2004/prog/p3/kadai2/enshu2-2003/prog/calc.p

127デフォルトの名無しさん:04/12/19 13:39:21
delphiですが
Memoに各行に入力された数値から平均値、最大値、最小値、標準偏差
をlabelに表示する。
標準偏差はarrayで宣言し配列を使った各データと平均値との偏差から計算した標準偏差と
データの和をデータ数で割って平均値を求め、分散の計算をし、平方根によって求めた2通り
表示する
おねがいします
X,M,SumX,SumX2,MinX,MaxX:single;
I,N:integer;
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
N:= Memo1.Lines.Count;
X:= StrToFloat(Memo1.Lines[I]);


for I:= 0 to N-1 do

M:=X/(N-1)
Label1.Caption:='平均値は'+IntToStr(X) ;
ここまでできたんですが間違い直しもかねておねがいします
128デフォルトの名無しさん:04/12/19 23:48:02
ヘルプ検索したか?
MeanAndStdDev手続きのソース見てみな。
・・・もっともキミのコード見るとそれ以前の問題のような気もするが。


MeanAndStdDev手続き
MeanAndStdDev は,配列要素の平均と標準偏差を計算します。
129デフォルトの名無しさん:04/12/20 22:05:22
2から17までの平方根を二つのグループに分け
その二つのグループができるだけ等しくなるよう
にするプログラムを書け
130デフォルトの名無しさん:04/12/20 22:09:45
>>129
命令されてまでやりたくない
131デフォルトの名無しさん:04/12/20 22:27:51
>>130
理不尽なことに宿題はたいてい命令口調で書かれています
132デフォルトの名無しさん:04/12/22 09:56:22
命令口調はいいけど二つのグループのなにをできるだけ等しくするんだろ?
133129:04/12/22 13:33:02
>>132
グループの中にあるすべての平方根の和です
どうしたらいいのかまったくわからないんでよろしくお願いします
134デフォルトの名無しさん:04/12/22 16:37:34
なんかどこかで見たような問題だからアルゴリズムがあるのかもしれんが、最悪でも単純に全パターン試しゃいいだろ
135デフォルトの名無しさん:04/12/22 17:45:28
ナップザック問題になりそうな気がするのはおいらだけ?
136初心者です:04/12/23 00:48:26
いい参考書ありますか?

私が調べた限りではサイエンス社からいくつか出版されています。
どうでしょうか?
137デフォルトの名無しさん:04/12/23 02:15:47
>>129
こんなもんで、どうでしょう?
program prg00(Output);
var
N: Integer;
e: array [2..17] of Real;
f: array [1..17] of Integer;
sumM,sumH,sum: Real;
procedure Print;
var
I: Integer;
begin
for I := 2 to 17 do
Write(Output, f[I]:2);
Writeln(Output, sumM)
end;
begin
sumM := 0.0;
f[1] := 1;
for N := 2 to 17 do
begin
e[N] := Sqrt(N);
sumM := sumM + e[N];
f[N] := 0
end;

つづく
138デフォルトの名無しさん:04/12/23 02:16:22
sumH := sumM / 2;
N := 2;
while N >= 2 do
begin
if f[N] = 0 then
begin
f[N] := 1;
sum := sum + e[N];
if sum >= sumH then
begin
if sum < sumM then
begin
sumM := sum;
Print
end
end
else
if N < 17 then
N := N + 1
end
else
つづく
139デフォルトの名無しさん:04/12/23 02:17:10
begin
f[N] := 0;
sum := sum - e[N];
if N < 17 then
N := N + 1
else
while f[N] = 0 do
N := N - 1
end
end
end.
140デフォルトの名無しさん:04/12/24 12:29:51
f[N]=0 の方の和が sumH を超えたときの探索枝もカットできるな。
あと、e[N] は N が増えると大きくなるんだから、その辺の探索も
カットできるな。
それ直せばいけるんじゃない?
141デフォルトの名無しさん:05/01/09 15:41:52
:=
↑これの読み方教えて
142デフォルトの名無しさん:05/01/09 15:47:42
>>141
めだか
143デフォルトの名無しさん:05/01/09 16:27:18
>>141
定義する
144デフォルトの名無しさん:05/01/09 21:25:13
>>141
あさいんめんとおぺれーたー、とかだった気がする
145デフォルトの名無しさん:05/01/10 03:18:57
てんてんいーこーる
146m(__)m:05/01/14 15:52:12
Cプログラムで合計と平均および最大値と最小値値を求めて表示するプログラムを作れ。
という課題を出されたのです。
3時間考えてもわからなかったので助けてください。
147m(__)m:05/01/14 15:55:01
1. キーボードから10個の実数を配列 double a[10] に読み込み、合計、平均、
及び最大値、最小値を求めて表示するプログラムを作れ。
という課題がでました。
助けてください
148デフォルトの名無しさん:05/01/14 15:58:22
Pascalの宿題は俺にやらせろ!!Part1
Pascalの宿題は俺にやらせろ!!Part1
Pascalの宿題は俺にやらせろ!!Part1
149デフォルトの名無しさん:05/01/15 07:35:22
質問です。
アルファベットの大文字を入力して小文字を出力したいのですが
アイディアだけでも教えてください
150デフォルトの名無しさん:05/01/15 08:07:15
Ord('a') - Ord('A')が文字コードでの大文字と小文字の差なので入力した字をOrdとChrで
151デフォルトの名無しさん:05/01/15 08:27:24
やべぇordとかchrとか全然ワカンネ('A`)
勉強しなおしてきます
152デフォルトの名無しさん:05/01/15 11:41:56
厳密に標準Pascalに従おうとすると、英字が連続しているとは
かぎらないので、ちょいむずかしい。表を使って
program Locase(input,output);
const MaxChar = 255;
var C : Char; I : Integer;
   table : array [Char] of Char;
   High, Low : packed array [1..26] of Char;
begin
   High := 'ABCDEFGHIJLMNOPQRSTUVWXYZ';
   Low := 'abcdefghijlmnopqrstuvwxyz';
   for C := Chr(0) to Chr(MaxChar) do table[C] := C;
   for I := 1 to 26 do table[High[I]] := Low[I];
   while not Eof do begin
      if Eoln then begin
         Readln; Writeln
      end else begin
         Read(C); Write(table[C])
      end
   end
end.
のようにする。ただし
1. Charが8ビットでない場合はMaxCharを適当に直すこと。
2. 入力が改行で終わっていない場合はおかしくなるかもしれない。
3. DelphiではHigh/Lowの型をstringにしないとエラーになる。
153デフォルトの名無しさん:05/01/15 19:35:44
Delphiなら LowerCase 使えば一発だけど
154デフォルトの名無しさん:05/01/16 23:31:30
>>147
ほかで質問したか?
っていうか、Cの入門書読めば配列の説明に解説つきでありそうだが。
たった3時間でくじけるな。
155デフォルトの名無しさん:05/01/16 23:47:19
今みたらCの宿題スレで質問済みだったね。
でもテンプレ無視の理解不能質問で見捨てられたみたい。
156デフォルトの名無しさん:05/01/17 00:50:07
Imageコンポーネントに円や多角形を描画して車とか船とかなんでもいいので
作ってもらえませんか?
157デフォルトの名無しさん:05/01/17 02:48:41
・ペイントを起動して、車とか船とかを描きてきとーに保存
・フォームにImageコンポーネントを貼りつけそこに読み込む
・完成
158117:05/01/17 16:50:05
すみません、パスカルでもいろいろあるんですかね???
これだと駄目みたいでした↓↓
159デフォルトの名無しさん:05/01/18 20:55:42
うん、HectoPascal とか。
160デフォルトの名無しさん:05/01/18 23:09:42
これってどれのことだ?
161デフォルトの名無しさん:05/01/20 12:43:18
クイックソートのプログラムってどんな感じになるの?
162デフォルトの名無しさん:05/01/20 13:38:25
#・・・懐かしい。Pascalのソースを目にするのは20年ぶりくらいだ。
#スレ違い申し訳無い。
163デフォルトの名無しさん:05/01/20 19:23:30
>>161
クイックソートは分割統治法を利用した再帰アルゴリズムです。
アルゴリズムを勉強しましょう!

おすすめ本
Delphiアルゴルズム
ISBN4−7973−0845−1

クイックソートの解説もソース付きで載ってるよ。
6年前の本だけどまだ売ってるのかな?
164デフォルトの名無しさん:05/01/20 20:12:14
>>161
全体をある値以上と以下に分けて、そのそれぞれをある値以上と以下に〜繰り返し。
165デフォルトの名無しさん:05/01/21 11:17:58
クイックソートはたいていのPascal教科書にのってるのでそれ参照。
Delphiでコンパイルできないように整合配列使って書いてみたが、ぜんぜん
おもしろくなかったのでやめた。
166デフォルトの名無しさん:05/01/24 23:02:11
人名とテストの点数を読み込み、リスト構造を作成する。
ただし点数の低い人のデータから入力するものとする。

program ex(input,output);
type name_p=^person;
person=record
name:string[20];
test:integer;
ptr:name_p
end;
var start,refer:name_p;
datn:string[20];
dat:integer;

{1人分のデータ(点数、名前)を読み込み、点数が低い順に並ぶようにそのデータを挿入する手続き}
procedure insert;
167デフォルトの名無しさん:05/01/24 23:02:52

begin
{初期設定}
new(start);
refer:=start;
{リスト構造の作成}
write('input name:'); readln(datn);
refer^.name:=datn;
while datn<>'end' do begin
write('input test:'); readln(dat);
refer^.test:=dat;
new(refer^.ptr);
refer:=refer^.ptr;
write('input name:'); readln(datn);
refer^.name:=datn
end;
refer^.ptr:=nil; refer^.test:=10000;
{データの挿入}
insert;
{データの出力}
refer:=start;
writeln;
while refer^.ptr<>nil do begin
writeln(refer^.name,':',refer^.test);
refer:=refer^.ptr
end;
writeln
end.
168166-167:05/01/24 23:03:29
挿入手続きinsertを完成させなさい。ただし引数は何も用意しないものとする。


これ、どなたかできますか?いろいろやったんですが上書きになったりして
できません(泣)助けてください。
169デフォルトの名無しさん:05/01/25 04:32:26
挿入というかリストのソートをすればいいんだよね。
最後の要素に10000を入れているということは、ほかの要素は10000
未満であると仮定していいのかな?

ポイントは(1)リストの先頭に挿入するときに厄介な事にならないように最初の
要素をダミーにしておくと楽(2)ポインタをつなぎかえる前に元の値を保存して
おく、くらい。

   procedure insert;
   var p, pptr, s, sorted: name_p;
   begin
      new(sorted);
      sorted^.ptr := refer; { 番人 }
      p := start;
      while p^.ptr <> nil do begin
         s := sorted;
         while s^.ptr^.test < p^.test do s := s^.ptr;
         pptr := p^.ptr; { 保存して }
         p^.ptr := s^.ptr; s^.ptr := p; { つなぎかえて }
         p := pptr { つぎへ }
      end;
      start := sorted^.ptr;
      dispose(sorted)
   end;

170168:05/01/25 07:29:13
>>169
ご丁寧にありがとうございます。
ただ、ちょっと説明が足りなかったかもしれません。
問題冒頭にあるように始めから、点数は低い順に並んでいるので
ソートでは無く、挿入なのです。
つまり以下のような文を手続き中に入れることになります。

write('input 挿入name:'); readln(newdatn);
write('input 挿入test:'); readln(newdat);

これを、順番を崩さないように挿入するということです。
分かりますでしょうか?m(_ _)m
171デフォルトの名無しさん:05/01/25 09:40:10
>>170
う、そんなに簡単な問題だとはおもわなかった。
var s, p: name_p;
としておいて

   p^.name := newdatn; p^.test := newdat;
   if newdat < start^.test then begin
      p^.ptr := start; start := p
   end else begin
      s := start;
      while s^.ptr^.test < newdat do s := s^.ptr;
      p^.ptr := s^.ptr; s^.ptr := p
   end

あたりでいいのでないの?
172デフォルトの名無しさん:05/01/25 09:41:21
>>171

追記。上のは newdatn/newdat の入力のあとに new(p); として
そのあとの部分ね。
173デフォルトの名無しさん:05/01/25 10:34:41
学生の身長を表すデータ型を、学籍番号を表す整数型の欄noと、
身長を表す実数型の欄heightをもつ次のレコード型で定義する。
type student = record
                no : integer;
                height : real
                end;
2人の学生のデータ(student型のa,b)を引数とする、以下の2つの関数および手続きを作成せよ。
(1)身長の高い方の学生の学籍番号noを返す関数higherno(a,b:student):integer
(2)身長の高い方の学生のデータをcに返す手続きhigher(a,b:student; var c:student)
ただし、2人の身長が等しい場合は一つめの引数となった学生のデータ
((1)ならば学籍番号。(2)ならばstudent型のデータ)を返すこととする。


そもそもレコード型へのデータを入れ方が分からないです(;´Д`)
おながいします
174デフォルトの名無しさん:05/01/25 10:57:11
>>173

さすがにそれは……

レコード型 a の内容を c に入れるには c := a で OK。
a が b より大きいなら a.height > b.height。

あとはわかる?
175173:05/01/25 12:44:19
そもそもレコードよく分かってないんで勉強しなおしまする
176168:05/01/25 19:54:28
>>171
できました!ありがとうございます!感動・・・
177173:05/01/27 11:42:21
function higherno(a,b:student):integer;
begin
if a.height >= b.height then higherno:=a.no else higherno:=b.no
end;

procedure higher(a,b:student; var c:student);
begin
if a.height >= b.height then c:=a else c:=b
end;

こんな感じでせうか(;´Д`)
178デフォルトの名無しさん:05/01/27 18:09:28
pascalでバックトラックを勉強したんですが、
プログラムの書き方が分かりません。
ナイトの巡回という名前のプログラム知ってますでしょうか?
179デフォルトの名無しさん:05/01/27 19:58:52
チェスの盤上をナイトが全マス移動するってやつか?
今まで移動したところを記憶して、全部移動してたら終了。
移動先があったら記憶して再帰、帰ってきたら記憶を消して次の移動先で再帰。
180デフォルトの名無しさん:05/01/27 20:10:33
そうです。

ナイトの初期位置(1、1)で、5*5マスに対する全ての解を求めよ。
ただし、対称なものは除くこと。

という問題の答えを教えて欲しいです。
181デフォルトの名無しさん:05/01/27 21:45:46
Delphi消したから今処理系ないんだよね。
対称解はどうやって除いたいいものか。
182デフォルトの名無しさん:05/01/27 22:03:46
1/8
183デフォルトの名無しさん:05/01/28 00:30:20
エイトクイーンのプログラムお願いします
184デフォルトの名無しさん:05/01/28 03:29:20
program eightqueen(input, output); const queen = 8; type q = 1..queen;
var board : array [q] of q; num : integer;
procedure answer; var i, j : q; begin writeln; num := num + 1; writeln(num);
for i := 1 to queen do begin for j := 1 to queen do
if board[i] = j then write('Q') else write('.'); writeln; end; end;
function check: boolean; var i, j : q; begin check := true;
for i := 1 to queen do for j := 1 to queen do if (i <> j) and
((i-j = board[i] - board[j]) or (i-j = board[j] - board[i]) or
(board[i] = board[j])) then check := false; end;
procedure loop(n : q); var i : q; begin for i := 1 to queen do begin
board[n] := i; if n <> queen then loop(n+1) else if check then answer;
end; end; begin num := 0; loop(1); end.
185デフォルトの名無しさん:05/01/28 11:17:23
Dev+GNU Pascal (A Full GPL Pascal Programming Environment + Win32 IDE)
http://www.gnu-pascal.de/contrib/chief/
186183:05/01/28 13:35:28
>>184
ありがとう!助かります!
187デフォルトの名無しさん:05/01/28 13:48:16
>>184
えらくおそいと思ったら、ぜんぶ置いてからチェックしてるのか。

188デフォルトの名無しさん:05/01/28 17:10:55
途中でチェック版
program eightqueen(input, output); const queen = 8; type q = 1..queen;
var b : array [q] of q; num : integer; procedure answer; var i, j : q;
begin writeln; num := num + 1; writeln(num); for i := 1 to queen do begin
for j := 1 to queen do if b[i] = j then write(' Q ') else write(' . ');
writeln; end; end; function check(n: q): boolean; var i: q; begin
check := true; for i := 1 to n-1 do if (abs(i-n) = abs(b[i]-b[n])) or
(b[i] = b[n]) then check := false; end; procedure loop(n: q); var i : q;
begin for i := 1 to queen do begin b[n] := i; if check(n) then if n <> queen
then loop(n+1) else answer; end; end; begin num := 0; loop(1); end.
189デフォルトの名無しさん:05/01/29 00:50:51
>>178,>>180のナイトの巡回、(1,1)開始で
とりあえず対称なものも含めて全ての解を求めるには
どうすればいいですか?
190デフォルトの名無しさん:05/01/29 01:23:00
総当り
191デフォルトの名無しさん:05/01/29 02:09:56
対称解ありだけど、8の倍数にならないな・・・。
program knight(input, output);const SIZE = 5; type D = 1..SIZE;
M = 0..SIZE*SIZE; var board : array [D, D] of M; num : Integer;
procedure init; var i, j : D; begin num := 0;
for i := 1 to SIZE do for j := 1 to SIZE do board[i,j] := 0; end;
procedure answer; var i, j : D; begin writeln; num := num + 1; writeln(num);
for i := 1 to SIZE do begin for j := 1 to SIZE do write(board[i,j]:3);
writeln; end; end; procedure move(x, y : D; n : M); forward;
procedure next(x, y : D; n : M); begin
move(x+2, y+1, n); move(x+2, y-1, n); move(x+1, y+2, n); move(x+1, y-2, n);
move(x-1, y+2, n); move(x-1, y-2, n); move(x-2, y+1, n); move(x-2, y-1, n);
end; procedure move; begin if (x in [1..SIZE]) and (y in [1..SIZE]) then
if board[x,y] = 0 then begin board[x,y] := n; if (n = SIZE*SIZE) then
answer else next(x, y, n+1); board[x,y] := 0; end; end;
begin init; move(1,1,1); end.
192デフォルトの名無しさん:05/01/29 06:48:14
>>188
微妙に出力形式が改良されてる(笑)。

というか >>184 でもそれなりの速度で解答がでるのを見て、
いまのCPUのすさまじい速さに今さらながら驚かされたよ。

>>191
対称解をのぞくと二種類だけど、片方は回転しても同形に
なるからだね。
193デフォルトの名無しさん:05/01/29 06:52:21
>>192
ごめん、191に対するレスは勘違い。
194デフォルトの名無しさん:05/01/29 09:01:48
>>191

とりあえず部分範囲型の範囲チェックをオンにすると move でこける。
(Delphi, Free Pascal) gpc でそのまま通るのはナゼ?
195デフォルトの名無しさん:05/01/29 17:22:53
ただのintegerとして扱われるからじゃない?
196デフォルトの名無しさん:05/01/31 09:15:57
あげ
197デフォルトの名無しさん:05/01/31 12:46:28
radixソートのpascalのプログラムをおねがいします。
198189:05/01/31 18:02:25
とりあえず、手元の資料からあまり離れないように
変数名や条件を書き換えてみましたが、
失敗してはいじってを繰り返しているうちにぐだぐだになってしまいました。

const n:=5;
var x0,y0,i,j:integer;dx,dy:array[1..8] of integer;board:array[1..n,1..n] of integer;
procedure tour(turn,x,y:integer); var i,j,k,no:integer;
begin
 no:=0;k:=0;
 if (x>0)and(x<=n)and(y>0)and(y<=n)and(board[x,y]=0) then begin
  board[x,y]:=turn;no:=no+1;k:=k+1;x:=x+dx[k];y:=y+dy[k];
  if turn=(n*n) then tour(turn+1,x,y)
 else begin board[x,y]:=0;tour(turn+1,x,y) end
end
else
 if turn=(n*n) then begin
  writeln('No.',no);
  for i:=1 to n do begin
   for j:=1 to n do
   write(board[i,j]:3);writeln
  end
 end;
end;
begin
dx[1]:=2;…dx[8]:=2;dy[1]:=1;…dy[8]:=-1;
for i:=1 to n do for j:=1 to n do board[i,j]:=0;
x0:=1;y0:=1;tour(i,x0,y0)
end.

途中で止まるか、何も出力されないかのどっちかだったと思うんですが、
どうでしょうか?
199デフォルトの名無しさん:05/01/31 21:35:53
const N = 100;
var A : array [0..N-1] of integer;

procedure radixsort;
const R = 10;
var
radix : array [0..N-1] of 0..R-1;
temp : array [0..N-1] of integer;
i, j, k, x, max: integer;
begin
max := 1;
for i := 0 to N-1 do
while A[i] > max do max := max * R;

x := 1;
while x <= max do begin
for i := 0 to N-1 do
radix[i] := (A[i] div x) mod R;

i := 0;
for j := 0 to R-1 do
for k := 0 to N-1 do
if radix[k] = j then begin
temp[i] := A[k];
i := i + 1;
end;

for i := 0 to N-1 do
A[i] := temp[i];
x := x * R;
end;
end;
200デフォルトの名無しさん:05/02/01 21:06:04
黒ツメ草の花が咲いたら
さあ行こうパスカル
201デフォルトの名無しさん:05/02/02 10:09:35
はぁ?
202デフォルトの名無しさん:05/02/02 19:05:00
書籍のデータベースの作成 Delphi
========================

1.要求仕様

(1)書籍の情報
   著者,書籍名,出版社,発行年月日,分野の分類,コメント
 
(2)必要な機能
 データの追加機能,データの検索機能,データの削除機能,
 データの更新機能,CSVファイルからのデータ入力機能,
 CSVファイルへのデータ出力機能
(3)データの形式,メニューなどの詳細仕様は各自で決めること.

こんな課題がでました。ほぼ丸投げ状態です。よかったらよろしくおねがいします
203デフォルトの名無しさん:05/02/02 19:21:51
それ宿題じゃなくておまえの仕事だろ
204202:05/02/02 19:26:47
いやほんとに課題です;普通にソフトウェアの授業で出ました
205デフォルトの名無しさん:05/02/03 09:48:32
とりあえず仕様の洗い出しから

書籍テーブル
 著者 文字型
 書籍名 文字型
 出版社(コード) 数値型(整数)
 発行年月日 日付型
 分野の分類(コード) 数値型(整数)
 コメント Memo型

出版社名マスタ
 出版社コード 数値型(整数)
 出版社名  文字型

分類名マスタ
 分類コード 数値型(整数)
 分類名  文字型

画面
 書籍テーブル入出力画面(追加・更新・削除)
 出版社マスタメンテナンス画面(追加・更新・削除)
 分類名マスタメンテナンス画面(追加・更新・削除)
 書籍テーブル検索画面
 CSVから書籍テーブルへインポート画面
 書籍テーブルからCSVへエクスポート画面
206デフォルトの名無しさん:05/02/03 09:53:40
【より良い】データモデリング【モデルを】
http://pc5.2ch.net/test/read.cgi/db/1057509675/
207デフォルトの名無しさん:05/02/03 14:01:12
「4×4の配列をLU分解するプログラムを作れ」という課題がでました。
よろしくお願いします
208デフォルトの名無しさん:05/02/04 00:56:34
わかんねーーーーーーーーーー!!!!
209デフォルトの名無しさん:05/02/04 01:23:08
このスレ結構需要があるのですね。
http://www.oishi.info.waseda.ac.jp/~oishi/sir/node21.html
このとおりにすれば?
210デフォルトの名無しさん:05/02/04 02:38:15
a,b,cを定数にして、三角形の面積の求め方(式)を教えて下さい。
211デフォルトの名無しさん:05/02/04 02:45:46
>>210
何の定数やら。
212デフォルトの名無しさん:05/02/04 02:53:54
>>211
変数でした。お願いします
213デフォルトの名無しさん:05/02/04 02:56:16
>>212
だから、a,b,cは何を表しているのか解からない。辺の長さかな??
214デフォルトの名無しさん:05/02/04 02:59:39
はい、そうです。辺の長さです
215デフォルトの名無しさん:05/02/04 03:03:13
216デフォルトの名無しさん:05/02/04 11:31:40
begin
a[1,1]:=2;a[1,2]:=2;a[1,3]:=1;a[1,4]:=1;
a[2,1]:=2;a[2,2]:=4;a[2,3]:=4;a[2,4]:=5;
a[3,1]:=4;a[3,2]:=10;a[3,3]:=14;a[3,4]:=18;
a[4,1]:=6;a[4,2]:=10;a[4,3]:=15;a[4,4]:=20;
p[1]:=1;p[2]:=2;p[3]:=3;p[4]:=4;
lup_decom(a,p,sz);
for i:=1 to sz do
begin
for j:=1 to sz do
if p[i]:=j then write(1,' ') else write(0,' ');
writeln();
end; writeln();

for i: =1 to sz do
begin
for j:=1 to sz do write(a[p[j],j:5,' ');
writeln()
end;
wrteln()
end.

↑LUP分解でlup_decom()の手続きを教えてください
217デフォルトの名無しさん:05/02/05 20:53:40

218デフォルトの名無しさん:05/02/10 21:17:02
100個の乱数の中から適当に数字選んで足してその合計が、整数の2乗になるようなプログラムお願いします。数字はできるだけ多く使用するようにお願いします。
219デフォルトの名無しさん:05/02/13 23:02:23
合計すると整数の2乗になる数値を選び出すってこと?
それを全組み合わせを取得?
適当に抜粋しないで問題全部書いてみな。
220デフォルトの名無しさん:05/02/13 23:36:03
与えられた整数をなるべく多く使用して、数の合計を2乗にするゲーム。

ルール

1、問題ファイル
・問題としてmondai.txtというファイルを入力する。
・kaito.txtという名前で出力する。
・kaito.txtには、使用した整数は”1”、しなかった整数は”0”を出力する。

2、得点の獲得条件
ポイントを獲得するには、以下の条件もすべて満たさなければならない。
以下の条件を満たしたとき、使用した整数の数を得点とする。
・合計数が平方数である。
・mondai.txtにある整数を使っていいのは一回まで。
・解答の合計した数がmondai.txtの全部の数を足したものの半分以下。

なんですけどわかりました?ファイルの入出力は大丈夫なんですけど、いかに整数をたくさん使用して、
その合計を平方数にするかということで悩んでます。
221デフォルトの名無しさん:05/02/14 00:16:23
 1+3+…+2・n-1=n^2
てなところからなんとかならんか?
222デフォルトの名無しさん:05/02/14 00:43:18
すいませんできません…
223221:05/02/14 00:55:53
>>222
奇数のループを作って与えられた数次々に引いていって残りがちょうど0になったら平方数。
続いて次の与えられた数についても次の奇数から順に引いていって残りがちょうど0になったら二つの与えられた数の和は平方数。
残りが0にならなかったら、残りを次の与えられた数に組み入れる。

ていう案は如何?
224デフォルトの名無しさん:05/02/14 01:06:23
おいで 今日もPascal ボクのひざへ♪
225デフォルトの名無しさん:05/02/14 07:36:56
1、大きい順に並べ直す
2、AllSumに全部の合計を求める 
3、SqrAll:=Trunc(Sqrt(AllSum/2));
4、SqrAllより小さくなるまで、大きい順に捨てる
5、SqrAlと一致すればそれが答え
6、差を求めて、その差に一致する 捨てた組-小さい組みがあればそれを採用して答え
7、それも無ければ
226デフォルトの名無しさん:05/02/14 08:02:26
再帰でしらみつぶしにやれば?
227223:221:05/02/14 08:07:25
>>225
3、N:=Trunc(Sqrt(AllSum/2));
3.1、SqrAll := N * N;
では?
なお、Nは>>221のnの上限。
228デフォルトの名無しさん:05/02/14 12:57:19
ちょっとむりっぽいのでプログラム書いてもらえますか?お願いします!
229227:223:221:05/02/15 00:30:38
>>228
わてちょっと阿呆っぽいのでプログラム書けないっぽいです!
230デフォルトの名無しさん:05/02/15 00:50:10
>>210
>a,b,cを定数にして、三角形の面積の求め方(式)を教えて下さい。
偶然だな。俺の大学でも似たようなレポ出てた。
231デフォルトの名無しさん:05/02/15 10:47:29
各辺の長さ、とかなら分かるが「定数」だけで面積でたらお笑いだな、その問題
232デフォルトの名無しさん:05/02/15 10:50:12
なんでだろう。10日ほど前の事がもう何ヶ月も前のことのように感じられる。
233デフォルトの名無しさん:05/02/15 21:01:28
Pascalでスクリプトってないですか?
234デフォルトの名無しさん:05/02/15 22:59:12
>>233
DelphiScript
235デフォルトの名無しさん:05/02/16 02:05:04
BASICをPASCALになおすのやってくれますか?
236デフォルトの名無しさん:05/02/16 04:30:13
BをPに、ICをCALに置換すればできる。
237デフォルトの名無しさん:05/02/16 20:44:49
>>235
b2p.exe
238デフォルトの名無しさん:05/02/16 23:37:05
>>237
それなんですか?
239デフォルトの名無しさん:05/02/18 18:38:06
mとnを読み込んで
1からmまでの整数の集合A{n∈N|1≦n≦m}の中から
n個の整数を取り出す組み合わせをすべて生成するプログラムを作れ。
数字の組み合わせは大きいほうから順に確定していくことにせよ。

という課題がでました。お願いします。

240デフォルトの名無しさん:05/02/18 22:35:09
集合型を使うのと、新たに集合用の型と演算を定義するのとどっちにする?
241デフォルトの名無しさん:05/02/18 22:47:54
集合生成は集合型とは直接関係しない。
比較演算子と集合演算子とin演算子しかない。
わからない
242239:05/02/18 22:49:31
後者のほうでお願いします。
243239:05/02/18 22:54:30
よくは分からないのですが、集合型って言うのを授業で使ったことがないので
それを使うのは想定されて無いと思います。
244デフォルトの名無しさん:05/02/18 22:55:07
type num = record n : integer; next : ^num; end; list = ^num;
procedure print(p : list);
begin
if p <> nil then begin
print(p^.next);
write(p^.n:8);
end;
end;
procedure hoge(m, n : integer; p : list);
var tmp : num;
begin
if n = 0 then begin
print(p);
writeln;
end else if m <> 0 then begin
tmp.n := m;
tmp.next := p;
hoge(m-1, n-1, &tmp);
hoge(m-1, n, p);
end;
end;
245デフォルトの名無しさん:05/02/18 23:00:26
type itteyoshi = set of 0..255;

procedure omaemona(m,n: Integer; a: itteyoshi = []);
var i: Integer;
begin
 if n > 0 then
  for i := m downto n do omaemona(i-1,n-1,a+[i]);
 else begin
  i := 1;
  while a <> [] do begin
   if i in a then begin
    Write(i,' ');
    Exclude(a,i);
   end;
   Inc(i);
  end;
  Writeln('');
 end;
end;

あとは、omaemona(5,3) とかやればいいんでない?
246239:05/02/19 12:25:03
返答遅れましたすみません。
next : ^num; のところで Error in type statement! 
とか言われてしまいます。というか、「type」自体を使ったことが
無いんですけど使わずに出来ませんでしょうか・・・。
247デフォルトの名無しさん:05/02/27 01:28:50
処理系によって"^"だったり"@"だったりするのかも、と横槍
248デフォルトの名無しさん:05/03/01 06:31:00
このくらいなら標準PASCALにしたがって書けばいいのに……

6.4.1 型定義の型表記は,その型定義の識別子の引用を含んではならない。
249デフォルトの名無しさん:05/03/01 07:58:28
ポインタ型の被指示型に現われる場合はいいんじゃないの?
250デフォルトの名無しさん:05/03/01 13:10:01
>>249
ごめんそこは問題なかった。でも
> hoge(m-1, n-1, &tmp);
とか
> a: itteyoshi = []
とかは標準PASCALじゃないよね。

あと型定義がコンパイラを通らないばあいは
  type list = ^num; num = record n : integer; next : list end;
と書くといいと思う(Jensen/Wirthはこの書き方)。


251デフォルトの名無しさん:05/03/02 00:26:33
>>250
うん、それは標準PASCALじゃないっぽい。

あと型の同値性は標準PASCALでは名前同値だっけ?
252デフォルトの名無しさん:05/03/02 04:23:03
>名前同値

原則としては。でも例外がいくつかあってあんまりきれいでない。
253デフォルトの名無しさん:05/03/04 14:13:44
すみません、Pascalで外部プログラムを起動させる方法ってありますか?
Shell32.DLLなどから呼び出したいのですが、どのようなフォーマットを
定義してあげればいいのでしょうか?

よろしくお願いします。
254まともに動いてない ◆/8LpUMqVAk :05/03/06 08:59:36
>>253
すみません、Pascalで外部プログラムを起動させる標準的な方法ってありません。
処理系依存なのでお使いの処理系のマニュアルを読んでください。
Shell32.DLLなどから.exeになったPascalプログラムを呼び出したい場合は、C言語のsystem関数のようなDOSプロンプトから実行するのと同じフォーマットで起動させる関数または手続きがあるはずです。
255デフォルトの名無しさん:05/03/12 09:27:44
遅レスすみませんです。よくわかりました。試してみます。ありがとうございました。
256774RR:2005/04/18(月) 21:06:54
Pascalいじってたのは遠い過去の話だから、妖しいカキコですまそ。
(いまじゃREALBasicで遊んでるだけのロートルでつよ)

>245
excludeはPascalの標準手続きじゃなかったような。
M-2では標準だったっけ?
incも標準手続きじゃないよな。

i-1とかもpred(i)などと書くのが好きだった。

type
 list = ^num;
 num = record
  n : integer;
  next : list
 end;

がやっぱ標準だよね。
コンパイラ側から見ると、list = ^numを見た段階で「なんか判らんが、
ポインタ型が来る」と思う。ポインタ型のデータ幅は何を参照しようと
一定で既知だから、one pass型の実装でも問題ない。

本当に再帰下降式を意識した言語だよな。
257まともに動いてない ◆/8LpUMqVAk :2005/04/19(火) 07:58:22
>256:774RRさん
incはPascalの標準手続きじゃったような。
i+1はなんて書くんだっけ。

後でJIS調べときまっさ。多分。
258デフォルトの名無しさん:2005/04/19(火) 11:17:26
>>257
Inc, Dec, Include, Exclude はボーランド拡張(元ネタは MODULA-2)です。
259774RR:2005/04/19(火) 12:57:25
>257
iが整数型なら succ(i)
260まともに動いてない ◆/8LpUMqVAk :2005/04/29(金) 01:52:08
ありがとう、あまりに昔(TP6.0の時代)なのでごちゃごちゃになってました。
261デフォルトの名無しさん:2005/05/26(木) 00:22:45
ポーランド記法で入力した四則演算式を2分木で表現し、 演算式の係数値を入力したときに、
その計算結果を出力する プログラムを作れ。

おねがいします。
262デフォルトの名無しさん:2005/05/26(木) 15:31:53
フィボナッチ数列のプログラム作ってください
263デフォルトの名無しさん:2005/05/27(金) 02:45:11
>>262

fibonacci.pas でぐぐるとたくさんでてくる。
264デフォルトの名無しさん:2005/05/27(金) 03:32:26
>>261
program rpo(input,output);
type tree = ^node; node = record op: Char; L,R: tree end; var root: tree;
   procedure ReadChar(var c: Char);
   begin c := ' '; while not Eoln and (c = ' ') do Read(c)
   end;
   procedure ReadTree(var t: Tree);
   begin New(t); ReadChar(t^.op);
      if t^.op in ['+', '-', '/', '*'] then begin
         ReadTree(t^.L); ReadTree(t^.R)
      end
   end;
   function Calc(t: Tree): Integer;
   var n: Integer;
   begin
      if t^.op = '+' then
         Calc := Calc(t^.L) + Calc(t^.R)
      else if t^.op = '-' then
         Calc := Calc(t^.L) - Calc(t^.R)
      else if t^.op = '*' then
         Calc := Calc(t^.L) * Calc(t^.R)
      else if t^.op = '/' then
         Calc := Calc(t^.L) div Calc(t^.R)
      else begin
         Write(t^.op, ': '); Readln(n); Calc := n
      end
   end;
begin ReadTree(root); Writeln(Calc(root)) end.
265デフォルトの名無しさん:2005/05/27(金) 03:37:10
>>264

問題の意味がよくわからなかったので、変数はぜんぶ1文字で整数と仮定してある。
式の中に同じ変数が複数回出てくる場合は毎回たずねてくる。
処理系が対話的である(Write してから Read すると、前の Write がプロンプトとして
働く)ことを仮定している。入力エラー処理はしていない。

このへんがまずかったら適当に直してちょうだい。

266261:2005/05/27(金) 03:38:22 BE:57095036-#
ありがとうございます!!
267デフォルトの名無しさん:2005/05/28(土) 19:40:08
>>263
サンクスコ
268デフォルトの名無しさん:2005/05/29(日) 11:07:16
一連の男女の名前と経歴を読み込み、
経歴の似ている男女を組み合わせできたカップルのリストを出力するプログラムお願いします!
269デフォルトの名無しさん:2005/06/02(木) 01:18:50
だれか・・・
270デフォルトの名無しさん:2005/06/02(木) 01:19:11
さげてた・・・
271デフォルトの名無しさん:2005/06/02(木) 06:56:27
>>268

経歴の類似度をどうやって数値にするつもりか知らないけれど、あとは
「安定な結婚」問題でしょ。アルゴリズムの本にはふつうに載っている。
たぶん三十行くらい。

stable matching か stable marriage あたりでぐぐるとでてくるんじゃない
かなあ。



272デフォルトの名無しさん:2005/06/02(木) 13:11:37
お勧めのコンパイラってなんでしょかね?
フリーパスカルは使いにくい…
273デフォルトの名無しさん:2005/06/02(木) 17:49:40
>>272
Borland - Delphi 6 Personal Download
http://www.borland.co.jp/delphi/personal/
274774RR:2005/06/02(木) 18:44:10
>271
「コンピュータアルゴリズム事典」にもあった。
あの本、愛用したなあ…
275デフォルトの名無しさん:2005/06/03(金) 03:11:01
>>274

アルゴリズム辞典の全ソースが奥村氏のサイトに置いてあるので
ttp://oku.edu.mie-u.ac.jp/~okumura/algo/algo_pas.html

この中の「program StableMarriage」を参照するといいかも。
276268:2005/06/04(土) 17:08:00
>>271

ありがとうございます!早速調べてみます
277デフォルトの名無しさん:2005/06/07(火) 15:29:27
ぶしつけでなんですが355/113がパイに近いということに感動し、ほかにもそういう数が無いかと思いパスカルで求めようと思いました。
んでこういうの書いたんですがなんか馬鹿なことしてますでしょうか?

program paisagashi(output);
const n=100000;
pi=3.141592653;
var i: integer;
delta: real;

begin
for i:=1 to n do begin
delta:=i*pi;
if abs(delta-round(delta))<0.0001 then writeln(i);
end
end.

n=10000だったらちゃんと113をwriteしてくれるんですけど・・・なにがいかんのでしょうか。
278デフォルトの名無しさん:2005/06/07(火) 18:04:01
i: integer → longint ?
279デフォルトの名無しさん:2005/06/07(火) 18:33:03
ああ、なるほど。
確かにintegerの範囲超えてますね・・・
馬鹿な質問に答えてくださりありがとうございました。
280774RR:2005/06/07(火) 19:04:14
MAXINTは処理系依存でつ
281277:2005/06/07(火) 19:27:57
>>280
あ、そのようですね。指摘ありがとうございます。
282デフォルトの名無しさん :2005/06/07(火) 19:37:49
こんな宿題が出ました。

入力として英小文字からなる文字列をいくつか与えられている。
それらを辞書式順序に並べ換えれ。

どなたか、よろしくお願いします。
283デフォルトの名無しさん:2005/06/07(火) 19:47:50
sageちゃった・・・
284284:2005/06/09(木) 04:13:34
自然数を小さい順に整列化したファイルfile1,file2がある。
この内容を合わせて、小さい順に整列化したファイル file3を作れ。
ただし、file1とfile2のデータ数は等しくないものとする。
実行例を示すために、二つのファイルを作成するプログラムも作り、出力結果を示せ。


という課題で、一応作ってみたんですけどエラーが出てしまいます。
どこが悪いのでしょうか
285284:2005/06/09(木) 04:16:20
program a(input,output,intfile1,intfile2,intfile3);
var
 intfile1,intfile2,intfile3 : file of integer;
 a,b,c : integer;

procedure mkfile1;
begin
 rewrite(intfile1,'file1');
 writeln('file1の作成 整数を小さい順に入力。(0を入力で終了)');
 readln(a);
 while a<>0 do begin
  write(intfile1,a);
  readln(a)
 end
end; { mkfile1 }

procedure mkfile2;
begin
 rewrite(intfile2,'file2');
 writeln('file2の作成 整数を小さい順に入力。(0を入力で終了)');
 readln(b);
 while b<>0 do begin
  write(intfile2,b);
  readln(b)
 end
end; { mkfile2 }
286284:2005/06/09(木) 04:16:37
procedure showfile3; { file3確認用 }
begin
 writeln('file3の出力。');
 reset(intfile3,'file3');
 while not eof(intfile3) do begin
  read(intfile3,c);
  writeln(c)
 end
end; { showfile3 }

begin
 mkfile1; mkfile2; { file1,file2の作成 }

 rewrite(intfile3,'file3');
 reset(intfile1,'file1'); reset(intfile2,'file2');
 read(intfile1,a); read(intfile2,b);

 repeat
  if a<b then
   begin write(intfile3,a); read(intfile1,a) end
  else
   begin
   if a>b then
    begin write(intfile3,b); read(intfile2,b) end
   else
    begin write(intfile3,a); read(intfile1,a); read(intfile2,b) end
   end
 until eof(intfile1) or eof(intfile2);
287284:2005/06/09(木) 04:16:47
 if eof(intfile1) then
  repeat write(intfile3,b); read(intfile2,b) until eof(intfile2);
 if eof(intfile2) then
  repeat write(intfile3,a); read(intfile1,a) until eof(intfile1);

 showfile3 { file3の出力 }

end.
288デフォルトの名無しさん:2005/06/09(木) 06:11:49
とりあえずTAに聞こうぜw
ハノイは大丈夫か?w
289デフォルトの名無しさん:2005/06/09(木) 15:02:05
ハノイは完成したぜ!
ファイル型苦手ぽ(´・ω・`)
290デフォルトの名無しさん:2005/06/10(金) 23:02:52
>>288
うるせーばか
291デフォルトの名無しさん:2005/06/12(日) 23:07:37
282です。
一応作ってみたんですが、例えば始めにデータ数を3と入力したら
データを2つ入れたところでソートされてしまいます。
どこが悪いのでしょうか
292デフォルトの名無しさん:2005/06/12(日) 23:07:57
program sort(input,output);
type characters = array [1..50] of char;
var d: array [1..10000] of characters;
i,j,k,n: integer;
tmp: characters;
begin
{データ入力}
read(n);
for i:=1 to n do
readln (d[i]);

{ソート}

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

{データの出力}

for i:=1to n do

writeln(d[i])
end.
293774RR:2005/06/13(月) 12:36:04
readとreadlnの違いを調べてみるといいよ。

実際、処理系やOSによっても実装がいいかげんだったりするから、
心配なら全部readlnで処理して、データの後には常に改行を入れるように
する。
294デフォルトの名無しさん:2005/06/17(金) 16:03:47
学生の学席番号と成績が入力として与えられている。
このとき、順位、学籍番号、成績の順に出力されるようにせよ。
ただし、同成績なら同じ順位とし、
順位がi番目の人がx人なら次の成績の人の順位はi+xとする。
っていうのが出たんですけど、
>同成績なら同じ順位とし、順位がi番目の人がx人なら次の成績の人の順位はi+xとする。
っていうところができません。
295294:2005/06/17(金) 16:05:38
program sort(input,output);
const n = 10000;
m = 8;
type characters = array[1..8] of char;
var d : array [1..n] of characters;{No}
g : array [1..n] of integer;{Score}
num,i,j,k,tmp1,r,q : integer;
tmp2 : characters;

begin
{input}
readln(num);
for i:=1 to num do
begin
read(d[i]);
readln(g[i]);
end;
296294:2005/06/17(金) 16:05:54
for i:=1 to num do
begin
{sort}
j:=i;
for k:=i+1 to num do
if g[j]<g[k] then j:=k;
tmp1:=g[j];
tmp2:=d[j];
g[j]:=g[i];
d[j]:=d[i];
g[i]:=tmp1;
d[i]:=tmp2;
end;
{output}
for i:=1 to num do
writeln(i,' ',d[i],' ',g[i])
end.
297774RR:2005/06/17(金) 16:25:33
点数は負にならないと仮定する。

const
MaxStudentNumPlus1 = {想定する学生数+1}

result = record
Score, IDNum : integer
end;

var
i, ii, n : integer;
StudentNum, order : integer;
results : array [1..MaxStudentNumPlus1] of result;
begin
{ 学生数StudentNumを読み込む。適当な値でなければ終了 }
{ resultsを読み込む。}
{ resultsを成績の降順に順序付けする }
results[succ(StudentNum)].Score = -1; (* sentinel *)
order := 1;
i := 1;
while i <= StudentNum do begin
ii := i;
n := results[ii].Score;
repeat ii := succ(ii) until results[ii].Score < n;
{ orderを出力 }
{ results[i]からresults[pred(ii)]までの内容を出力 }
order := order + (ii - i);
i := ii
end
end.
298デフォルトの名無しさん:2005/06/19(日) 14:17:24
英小文字からなる文字列をいくつか入力して、
それらを辞書式順序で並べ替えるプログラムを作成せよ。
という宿題がでたんですが配列を使ってやってみようとしたんですが、
文字型の定義とかがうまくいきません、どなたかよろしくおねがいします。
299デフォルトの名無しさん:2005/06/20(月) 01:10:35
大学でPASCAL習わされる人ってすくないのかなぁ
300デフォルトの名無しさん:2005/06/20(月) 01:23:54
298です、すぐ上に同じ質問が・・・、すいませ
301デフォルトの名無しさん:2005/06/21(火) 03:53:25
数列の掛け算のプログラムを作っているのですが…
arrayとfor変数to doを使って数列の成分を入力したあと、
うまく計算させることができません。
個々の成分をa11、a12....と入力させて実行させることはできたのですが、
課題として配列変数を使わないといけないらしいので、
arrayとfor変数to doを使った数列掛け算のプログラムのご指南をおねがいします。

302774RR:2005/06/23(木) 17:20:17
数列の乗算というのは何だろう? 行列のことかな?
だったら「MATLABを買う」が一番はy(r
303デフォルトの名無しさん:2005/06/23(木) 20:44:29
>>302
実際に直面している問題ならそれで正解だけど、>>301は課題だから
さすがにそれはまずいだろ。
304デフォルトの名無しさん:2005/06/24(金) 00:05:19
>>301
よし、やってる!
と思ったはいいんだが数列の掛け算ってどういうこと?

program hairetsu(input,output);
const n=10;
var a : array [1..n] of integer;
i : integer;
begin
writeln(n,' 個の数値を順に入力してください');

for i:=1 to n do read(a[i]);
writeln('隣り合うものを順にかけてみた');
for i:=1 to n-1 do writeln(a[i]*a[i+1]);

end.

こんなん作ってみたが参考になるんだろうか。
305774RR:2005/06/24(金) 12:30:39
>303 まぢレスされちゃった orz

Pascalな課題をWirth教徒が勝手に解いて楽しむスレだったな。
効率の悪い例だけれど、定義に沿った計算法。動くと思うけど、
面倒だからテストしてない(一時的にマカーなものですまそw)。
MATLABなら一行なんだがww

const
maxColumn = {assumed maxium column number};
maxRow = {assumed maxium row number};
type
indexC = 1..maxColumn;
indexR = 1..maxRow;
matrixdata = array[indexC][indexR] of real;
matrix = record
nc : indexC; (* number of columns *)
nr : indexR; (* number of rows *)
data : matrixdata
end;

{つづく}
306774RR:2005/06/24(金) 12:31:21
procedure MatrixProduct(A, B : matrix; var C : matrix; var avail : boolean);
(* A×Bを計算し、Cに出力する。演算不能であればavailにfalseを返す *)
var i : indexC; j : indexR; k : integer; sum : real;
begin
avail := (A.nc = B.nr);
if avail then
with C do begin
nc := B.nc;
nr := A.nr;
for i := 1 to nc do
for j := 1 to nr do begin
sum := 0;
for k := 1 to A.nc do sum := sum + A.data[k, j] * B.data[i, k];
data[i, j] := sum
end
end
end;
307デフォルトの名無しさん:2005/06/25(土) 17:43:17
宿題の一部で使いたいんですが、

ある集合Sがあってある数nがあったとします。
nがSの中に無かった場合その後のプログラム(for文等)を実行させる方法がどうすればいいか分かりません(´・ω・`)
よろしくお願いします。
308デフォルトの名無しさん:2005/06/25(土) 17:52:30
ああ、説明不足_| ̄|○
・集合Sを作る
・Sに数kを入れる
・集合Sにnがあるか無いかを調べ、無かったらその後のを実行

こんなのでもう1時間くらい悩んでますorz
309デフォルトの名無しさん:2005/06/25(土) 21:15:59
program match(input,output);
const m=3;
type syuu = array [1..m,1..m] of integer;
var S : syuu;
i,j,n : integer;
k,key : integer;
begin
{Sの中身を入力}
for i:=1 to m do begin
for j:=1 to m do begin
read(k);
S[i,j]:=k;
end;
end;
{ある数nを入力}
writeln;
read(n);
for i:=1 to m do begin
for j:=1 to m do
if n=S[i,j] then key:=1;
end;
if key=1 then begin
{なにかすること。}
end;
end.

>>307
こういうことでいいのか?
310774RR:2005/06/25(土) 22:42:57
ある元 n が、集合型変数 s にあるかどうかは式 n in s を評価すれば判る。


var
s : set of 1..16;
n : 1..16;

begin
...
s := [3, 5, 2];
s := s + [7, 11, 13];
n := {なんか好きな数}
if n in s then {なんか好きな処理};
...
311デフォルトの名無しさん:2005/06/26(日) 07:29:24
>>309,310
ありがとうございます!教科書にあった>>310さんの
s := [3, 5, 2];
s := s + [7, 11, 13];
こういう表現がどうすればできるのかと分からなかったもので・・・・(しかも記述が[]じゃなくて{}なんですよね・・)。
そしてif文はinを使えば判定できるんですね・・・。
日本語不足でごめんなさい(;´Д`)
312デフォルトの名無しさん:2005/06/28(火) 15:54:38
キーボードから任意個数(上限100)の整数データ入力に対して、次を求める。
 ● 入力したデータの個数
 ● 偶数データ、奇数データの個数
 ● 入力したデータを表示
 ● 小さい順番に並べ替える、大きい順番に並べ替える
 ● 平均、分散、中央値(メジアン)を求めよ。

すみません、お助けくださいませm(__)m
313301:2005/06/28(火) 15:59:30
>302、304
すみません、数列の掛け算ではなく、行列の掛け算でしたm(__)m
304さんに「数列の掛け算」をわざわざプログラムしていただいたのに、
申し訳ありません。。。
よろしければ、行列の掛け算で再度お願いいたします。。。
314303:2005/06/28(火) 17:19:58
>>313
>>305,>>306 がその答えだと思うんだけど、なぜ無視?

>>305
ボケツッコミのつもりだったんだけど…
315774RR:2005/06/28(火) 18:05:54
>314 えへへ(^^)
>312
Pascalの標準的な方法だけで「キーボードから任意個数の整数データを
入力する」のはやればできるが面倒(入力終了を示す一般的な方法が
ないから)。

仮に、既にデータ数はn、データは配列AのA[1]からA[n]まで入っているとする。

手持ちの処理系(Virtual Pascal for OS/2)で関数引数を記述する方法を
忘れたので例によってテストできないw 取説どこにしまったっけ…

function NumberOf(function criterion(n1 : integer) : boolean);
var nn : integer;
begin
nn := 0;
for i := 1 to n do nn := nn + ord(criterion(A[i]));
NumberOf := nn
end;

function isodd(n : integer) : boolean;
begin
isodd := odd(n)
end;
function iseven(n : integer) : boolean;
begin
iseven := not odd(n)
end;

偶数データの個数はNumberOf(iseven)、
奇数データの個数はNumberOf(isodd)でもとまる。
316774RR:2005/06/28(火) 18:07:06
つづき

procedure Quicksort(L, R: integer; function order(n1, n2 : integer) : boolean);
(* 奥村先生の本というかalgo_pas.lzhのCHAP07.PRGから改変 *)
var I, J, X, T: integer;
begin
X := A[(L + R) div 2];
I := L - 1; J := R + 1;
repeat
repeat I := I + 1 until order(X, A[I]);
repeat J := J - 1 until order(A[J], X);
T := A[I]; A[I] := A[J]; A[J] := T (* 最後の交換は余計である *)
until I >= J;
A[J] := A[I]; A[I] := T; (* 最後の交換を元に戻す *)
if L < I - 1 then Quicksort(L, I - 1, order);
if J + 1 < R then Quicksort(J + 1, R, order)
end;

function NotLessThan(n1, n2 : integer) : boolean;
begin
NotLessThan := n1 <= n2
end;
function NotGreaterThan(n1, n2 : integer) : boolean;
begin
NotGreaterThan := n1 >= n2
end;

昇順にソートするときはQuicksort(1, n, NotLessThan)、
降順ならQuicksort(1, n, NotGreaterThan)を呼ぶ。
317304=309:2005/06/28(火) 20:58:06
初めてカキコさせていただきます。学校での演習が少なすぎるんでこのスレで質問に答えるフリをして
心から感謝をして演習問題にさせていただいているものなんですが、このスレにとっては邪魔
者でしょうか。邪魔ではないのなら居座りたいと思ってるんですが。
いまのところかなりチンプンカンプンな書き込みをしておりますし、いちいちレスをつけるのも
らくではないだろうと思いそろそろ気が引けてきた次第です。
んー。名前欄に初心者とでも書いておこうかなとは思っているんですがどうでしょう
318774RR:2005/06/28(火) 21:06:52
>317=309=304
折れも勝手に居座ってるアマチュアなロートル。
過疎板の過疎スレなんだから皆で居座ろう。

ついでに添削。
>309の
if n=S[i,j] then key:=1;
...
if key=1 then

ってのはPascal的wじゃない。せっかく論理型ってのがあるんだから、

flag : boolean;
...
flag := n = S[i, j]
...
if flag then ...

なんて書くとかっこいいし、エラーも減るよ。
319317:2005/06/29(水) 00:29:35
>>318
どうもありがとう。
いざというときは縦読みだとでも言って逃げるつもりでした。
320デフォルトの名無しさん:2005/07/09(土) 15:24:57
program P1;
var
permstring,blank:string;

procedure permutation(var target,original :string);
{originalの並び替えた順列をすべて見つけ、それらをtargetの右端に連結する}
var
i:integer ;
target1,original1:string;
begin
if length(original)=0 then
begin
writeln(target);
end {originalに文字がないならtargetを出力}
321デフォルトの名無しさん:2005/07/09(土) 15:26:09
else
begin
i:=1;

while i <= length(original) do {それ以外は各々のiに対して}
begin {originalのi番目の文字をtargetの右端に写し}
target1:=target+original[i]; {再帰の呼び出しを行う}
original1:=copy(original,1,i-1)+copy(original,i+1,length(original)-i);
permutation(target1,original);
i:=i+1;
end;

end;

end;

begin {メイン開始}
writeln('input a string of characters');
readln(permstring);
blank:= ' ';
writeln('the set of permutations:');
permutation(blank,permstring); {あらゆる順列を見つける}
writeln('done');
end.
322デフォルトの名無しさん:2005/07/09(土) 15:26:31
ランタイムエラーが出るんです・・・。
323デフォルトの名無しさん:2005/07/09(土) 23:44:34
> permutation(target1,original);

permutation(target1,original1);

じゃないかな?
324デフォルトの名無しさん:2005/07/12(火) 22:50:58
プログラムの実行時間を計測するにはどうすればいいんですか?
順列のプログラムを並び替える個数を変えながら計測しろっていう問題
なんですけど、プログラムはできてます。
ちなみにDelhi6を使ってます。
325デフォルトの名無しさん:2005/07/12(火) 23:20:12
始める前の時間を保存。
終了したときの時間との差を求める
326デフォルトの名無しさん:2005/07/13(水) 01:26:53
Windows.GetTickCount でも使えば?
327東海大学前:2005/07/13(水) 12:27:46
プログラミング初心者なのですが、キーボードから整数値の駐車時間を分単位で読み込む。
・駐車時間が1時間未満ならば無料
・駐車時間1時間から3時間未満までは150円
・3時間以上は、一律300円
・0(ゼロ)を入力すると終了する。
というのがどうしても分からないのですが、よかったら教えて頂けないでしょうか?
<プログラム実行例>


PARKING
Input minutes = 430
Parking time => 7:10 =>\300
Input minutes = 127
Parking time => 1:7 =>\150
Input minutes =67
Parking time => 1:7 =>\150
Input minutes =32
Parking time =>0:32 =>\ 0
Input minutes =0
328デフォルトの名無しさん:2005/07/13(水) 15:16:48
Write(Output, 'Input minutes = ');
Readln(Input, n);
Write(Output, 'Parking time => ', n div 60, ':', n mod 60, ' =>');
if n < 60 then
Writeln(Output, '\ 0')
else
if n < 180 then
Writeln(Output, '\150')
else
Writeln(Output, '\300');

みたいな感じに作ってみよう。
329774RR:2005/07/13(水) 18:53:32
if n < 60 then writeln(output, '\ 0')
else if n < 180 then writeln(output, '\150')
else writeln(output, '\300');

と書くとM-2風でカッコイイとまにあがゆってた
330デフォルトの名無しさん:2005/07/13(水) 21:16:02
case min of
 0: Exit;
 1..59: cost := 0;
 60..179: cost := 150;
else cost := 300;
end;
Writeln(cost);
331デフォルトの名無しさん:2005/07/15(金) 01:02:43
プログラム初心者です。
宿題がでたのですが、よくわからないので質問させてください。
20人分の国語のテストの点を入力させ、その順位を出力するアルゴリズム。
というのです。
お願いします。
332デフォルトの名無しさん:2005/07/15(金) 01:23:59
1. 点数を入力させる
2. ソートする
3. 順序と点数を出力する

ソートはとりあえずバブルソートあたりをぐぐれ。
そのまんまのコードが幾らでも見つかる。
わからんかったらまたおいで。
333デフォルトの名無しさん:2005/07/15(金) 01:27:28
ちなみに
「バブルソート Pascal」より
「バブルソート Delphi」でぐぐった方がええ。
334デフォルトの名無しさん:2005/07/15(金) 02:07:39
ありがとうございます。
早速ぐぐって色々見てみました。
http://su10.sgu.ac.jp/~morita/Seminar/6thStudent/entani/sort/bubble/bubble.html#Bubble.Program
などを参照してみたんですが、具体的なアグロリズムが見つからずわからないままです(汗
この宿題は手打ちでしなければならないので、サンプルとしてのコードなどを教えていただけるとありがたいです。
よろしくお願いします。
335デフォルトの名無しさん:2005/07/15(金) 02:09:35
間違えました。
>アルゴリズムです

あと、ソートのやり方がわからないです・・・。
336デフォルトの名無しさん:2005/07/15(金) 04:37:57

for A:=1 to 20 do
begin
C:=1;
for B:=1 to 20 do
if TEN[A]<TEN[B] then
C:=C+1;
JUN[A]:=C;
end;

こんな感じで
337pascal初心者:2005/07/16(土) 23:56:08
ファイルから数字を配列に読み込み、
ソーティングアルゴリズムによりその数字を昇順に並び替え、
並び終わった後の配列の要素をファイルに出力するプログラムを作成せよ。

ソートは何とかなりそう。
……テキスト型の数字ってどうやって比較するんですか?
338デフォルトの名無しさん:2005/07/16(土) 23:59:15
>>337
数字の部分だけ抜き出して StrToInt とかで数値に直す。
339デフォルトの名無しさん:2005/07/17(日) 00:22:20
>>337
俺の課題と似てるなぁ
340pascal初心者:2005/07/17(日) 00:31:13
<<338
やっぱり、一旦数値にするんですか。
ありがとうございました。

<<339
おんなじトコでしょうか。
問題文はほぼそのまま写しましたが。

また来るかもしれませんので、その時はよろしくお願いします。
341デフォルトの名無しさん:2005/07/17(日) 00:42:58
入力に使うファイルがCSVみたいなやつなら
直接 Integer や Real 型の変数に読み込めばいい。
Input を ファイルにするだけ。
342デフォルトの名無しさん:2005/07/17(日) 21:01:19
次の2つの条件を満たして、四則演算式を二分木で表現せよ。

1. 演算子とそれによって結ばれる2つの項は,演算子をノード(演算子ノード)として,
   演算子の左の項を演算子ノードの左の子とし,
   右の項を演算子ノードの右の子として表現する(項が数または変数の場合は二分木の葉となる).

2. 演算の優先順位が最も低い演算子(+または−)を中心として,
   左右の項に分ける.ただし,最も低い演算子が複数個ある場合は,そのうち最も右にある演算子を中心に項を分ける.
   分けた項に演算子が含まれる場合は,同様にして項が数または変数のみとなるまで左右の項に分ける. 

演算の優先順位:(*,/)>(+,−)

二分木のノードはレコード型として定義するものとする。


入力や出力は考えなくて良いみたいです。よろしくお願いします。
343デフォルトの名無しさん:2005/07/17(日) 21:08:48

文字列として与えられた式を、ツリー構造に変換しろってこと?
344デフォルトの名無しさん:2005/07/17(日) 21:16:04
そうです。例えば 5+62/4-3 とか与えられた時に、
それをツリー構造に変化するという事です。
345デフォルトの名無しさん:2005/07/18(月) 00:26:16
procedure Convert(S: String; Node: ノードの型);
var
 iOperator: Integer;
begin
 S から演算子を優先順位が高い順に捜し、見つかったらそのインデックスを保存(iOperator)。
 演算子が見つかった場合
  演算子を Node で保持。
  S を iOperator の位置で2つに分割。
  Convert(S の左側, 新しく作成した Node の左側の子);
  Convert(S の右側, 新しく作成した Node の右側の子);
 演算子が見つからなかった場合
  この時点で S は単一の数値又は変数なので、そのまま Node で保持。
end;

こんな感じで再帰的に呼んでいけばいい。
最初の呼び出しは、
 S = 与えられた式
 Node = ルートノード
346346:2005/07/18(月) 01:01:25
×S から演算子を優先順位が高い順に捜し
○S から演算子を優先順位が低い順に捜し

(´・ω・) ゴメス
347345=346:2005/07/18(月) 01:06:17
ああ、更に名前欄間違えてたorz
348デフォルトの名無しさん:2005/07/18(月) 04:27:19
なんとなく気になったんですが
>>342のような処理はなにかに役立つんでしょうか。
俺にはやけに意味深に見えるのですが。
349デフォルトの名無しさん:2005/07/18(月) 08:25:42
>>345
ありがとうございます。

>>348
役に立つかどうかはわからないですけど・・・。
350デフォルトの名無しさん:2005/07/18(月) 09:52:51
>>348
微積分とか数式処理をするときにこういうことをする人もいるかも知れん。

コンパイラとかインタプリタ作るとき、おれは一次元配列でやったが、
こういうことする人もいるかも知れん。

ジェネティックプログラミングでこういうことする人もいるかも知れん。

こういう処理がすごーく役に立つかどうかは分からんけど、
面白いのは面白いよね。
351デフォルトの名無しさん:2005/07/18(月) 18:46:48
>>345
これ、文字式をstringで定義(?)してるけど、packed arrayの形でも分割できる?
俺の課題にも文字式を分割する部分があるんだけど、やり方がわからないもんで。
352337:2005/07/19(火) 23:10:15
ordなどを駆使して数値に直すようにと言われました。
誰か、ヒントでもいいから教えてくれませんか。
353デフォルトの名無しさん:2005/07/19(火) 23:50:33
Pascalってcontinue文ある?
354デフォルトの名無しさん:2005/07/20(水) 00:02:24
標準のPascalにはループの途中で脱出するようなものはない。
355デフォルトの名無しさん:2005/07/20(水) 00:05:46
一文字づつord(x) > ord(y)みたいに比較するんでない?
356デフォルトの名無しさん:2005/07/20(水) 00:14:53
>>354
ありがとう。助かりました。
357デフォルトの名無しさん:2005/07/20(水) 17:21:59
>>337
文字の読み込みはできるんだよな?
たとえば読み込む数が37だとしたらとりあえず一文字読み込み変数xに代入する。
ここでxには文字型の3が入っている。
それを数字に直すにはord(3)-ord(0)とすればよい。これをyに代入。
これでyには数字としての3が入ってる。
また一文字読み込んで今度は変数xに7を入れる。
これまた数字に直すから、ord(7)-ord(0)を取る。
そしてy:=y*10+ord(7)-ord(0)とすればよい。
これでyには37が代入される。
ファイルに数字がどのように記載されているのか分からないからどうしようもないけど、
これにwhile not eof() do beginなんかを付け加えていけばできるはず。
358デフォルトの名無しさん:2005/07/20(水) 17:23:54
ごめん、修正。

>>337
文字の読み込みはできるんだよな?
たとえば読み込む数が37だとしたらとりあえず一文字読み込み変数xに代入する。
ここでxには文字型の3が入っている。
それを数字に直すにはord(x)-ord('0')とすればよい。これをyに代入。
これでyには数字としての3が入ってる。
また一文字読み込んで今度は変数xに7を入れる。
これまた数字に直すから、ord(x)-ord('0')を取る。
つまりy:=y*10+ord(x)-ord('0')とすればよい。
これでyには37が代入される。
ファイルに数字がどのように記載されているのか分からないからどうしようもないけど、
これにwhile not eof() do beginなんかを付け加えていけばできるはず。
359774RR:2005/07/20(水) 17:26:42
文字'0'から'9'までが、この順で、しかも途中に他の文字がなく充填されて
いると仮定する。
const MaxDigitPlus1 = 9; (* 桁数+1 *)
type str = packed array [1..MaxDigitPlus1] of char;
var zero : integer;

function StrToInt(s : str) : integer;
var i, ii : integer;
begin
i := 1; ii := 0;
s[MaxDigitPlus1] := ' '; (* sentinel *)
while s[i] in ['0'..'9'] do begin
ii := ii * 10 + ord(s[i]) - zero;
i := succ(i)
end;
StrToInt := ii
end;

begin
zero := ord('0');
writeln(StrToInt('123')
....
360デフォルトの名無しさん:2005/07/20(水) 21:38:35
>>337 は、入力ファイルの例を書くべし
361デフォルトの名無しさん:2005/07/21(木) 19:38:43
スイマセン。もう自分の手に負えないので質問に来ました。宜しくお願いします。
このプログラムなんですが

procedure sort(var t : table);
var i,j,w : integer;
label m;
begin
for i := 2 to n do begin
w := t[i];
j := i;
repeat
if t[j-1] > w then begin
t[j] := t[j-1];
j := j - 1;
end else goto m;
until (J=1) ;
m:
t[j] := w;
end;
end;

なぜかlabelのところで「beginを入れろ」とエラーがでてしまいます。
もう全くワケわかめです・・・
何が悪いのか教えてください!!おねがいします!!
362774RR:2005/07/21(木) 19:55:04
名札(label)の宣言は、定数宣言の前。

×
var i,j,w : integer;
label m;


label m;
var i,j,w : integer;
363361:2005/07/21(木) 20:23:19
キターーーーーーーーーーーーーーー!!!!!!
あざーーーーーーーーーーーーーす!!!
本当にありがとうございます!!!
364 ◆MWvsskuWWc :2005/07/25(月) 18:46:26
質問させてください

出力するテキストファイルに改行を書き込むにはどうすればいいのですか?

assign(t1,"output.txt");
rewrite(t1);

writeln(t1,'ホゲホゲホゲ');
writeln(t1);
writeln(t1,'フガフガフガ');

close(t1);

こうしても、出力結果はホゲホゲホゲフガフガフガになってしまいます。
ホゲホゲホゲ

フガフガフガ
にするにはどうしたらいいですか?御願いします
365774RR:2005/07/25(月) 19:53:19
assign(t1,"output.txt")←これって釣りじゃないよな?
'output.txt'のtypoだよな?
366 ◆MWvsskuWWc :2005/07/25(月) 20:14:19
すみません ' です 間違えました
367デフォルトの名無しさん:2005/07/25(月) 20:16:39
しかし、364のように改行ができません。連続書き込み申し訳ないですが。。。
368774RR:2005/07/25(月) 23:03:34
writelnで改行記号を出力する。使い方は>364であってるよ。
コンパイラが文句を言わないなら、t1はtextとして定義されているんだろう。
となると、プログラミング以外の問題だと思われるわけだ。

吐いたファイルをバイナリエディタなりなんなりで覗いてみて、
「改行記号」として何を出力してるのか見るのが手っ取り早いと思う。
369デフォルトの名無しさん:2005/07/25(月) 23:18:43
ありがとうございました

とりあえず使い方は合っていたようで・・・安心しました。
学校ではLinuxで家ではcygwinなんですが。

ちょっと調べてみます。お世話なりました!
370デフォルトの名無しさん:2005/07/26(火) 14:01:15
加減乗除だけで平方根の近似値を求めるってのをpascalで表示したいのですが、どうすればよいでしょうか?
小数第一位まで求めるようにしたいです。
371デフォルトの名無しさん:2005/07/26(火) 14:34:12
372デフォルトの名無しさん:2005/07/26(火) 19:59:14
すみません。もう僕の手には負えないので質問させてください。
クイックソートなんですが、あるところからソースを手に入れたところpivotをソートする数列の最後の数としていたんです。以下のプログラムです
373デフォルトの名無しさん:2005/07/26(火) 20:01:42
procedure sortRec(var t : table; min, max : integer);
var i,j,pivot,w : integer;
begin
    if min < max then begin
        pivot := t[max];
        i := min;
        j := max - 1;
        while t[i] < pivot do i := i + 1;
        while (i < j) and (t[j] > pivot) do j := j - 1;
        while i < j do begin
            w := t[i];
            t[i] := t[j];
            t[j] := w;
            while t[i] < pivot do i := i + 1;
            while (i < j) and (t[j] > pivot) do j := j - 1;
            while (i < j) and (t[i] = pivot) and (t[j] = pivot) do begin
                i := i + 1;
                j := j - 1;
            end;
        end;
        w := t[i];
        t[i] := pivot;
        t[max] := w;
        sortRec(t,min,i-1);
        sortRec(t,i+1,max);
    end;
end;
374デフォルトの名無しさん:2005/07/26(火) 20:07:45
そこで僕はソートする数列の一番最初の数をpivotとしてプログラムを作りたいなと思い、以下のようなプログラムを作成しました
375デフォルトの名無しさん:2005/07/26(火) 20:13:27
procedure sortRec(var t : table; min, max : integer);
var i,j,pivot,w : integer;
begin
    if min < max then begin
        pivot := t[min];
        i := min+1;
        j := max ;
        while t[i] <= pivot do i := i + 1;
        while (i < j) and (t[j] >= pivot) do j := j - 1;
        while i < j do begin
            w := t[i];
            t[i] := t[j];
            t[j] := w;
            while t[i] <= pivot do i := i + 1;
            while (i < j) and (t[j] >= pivot) do j := j - 1;
            while (i < j) and (t[i] = pivot) and (t[j] = pivot) do begin
                i := i + 1;
                j := j - 1;
            end;
        end;
        w := t[j];
        t[j] := pivot;
        t[min] := w;
        sortRec(t,min,i);
        sortRec(t,j,max);
    end;
end;
376デフォルトの名無しさん:2005/07/26(火) 20:17:22
↑のようなプログラムを作成したところ、コンパイルは出来るのですが「実行時にエラーが発生しました」といわれます。
もう完全にお手上げです・・・

お願いします、ヒントでもいいので教えていただけないでしょうか?
377デフォルトの名無しさん:2005/07/26(火) 20:19:05
すいませんさっきの僕が作成したほうのプログラムにミスがありました

×
 sortRec(t,min,i);
 sortRec(t,j,max);


 sortRec(t,min,j);
 sortRec(t,i,max);

でした。すみませんでした
378デフォルトの名無しさん:2005/07/26(火) 21:37:43
sortRecの再帰呼び出しで配列の範囲外を渡してるか、
無限に再帰呼び出しをしてる。
379デフォルトの名無しさん:2005/07/26(火) 21:41:32
sortRecの再帰呼び出しで配列の範囲外を渡してるか、
無限に再帰呼び出しをしてる。
380デフォルトの名無しさん:2005/07/27(水) 05:09:54
>>372
どうせアレンジするなら、
pivotを端っこにすると、既に殆どソートされているデータに対して
弱くなるので、min と max の真ん中くらいを使うといいと思う。
宿題なら、アレンジ理由も書けるし。

再起呼び出しの所は元のままいじる必要ない。
381デフォルトの名無しさん:2005/07/27(水) 16:17:37
宿題で余計なアレンジすると「勝手なことすんな」って返されない?
382デフォルトの名無しさん:2005/07/27(水) 17:41:44
>>381
余計ならしかたないと思う。
383データボックス:2005/08/18(木) 00:16:12
384データボックス:2005/08/18(木) 00:19:21
a
385データボックス :2005/08/18(木) 00:20:56
program strlen_prg(input, output);
  type
    size_t = integer;
  var
    str1 : packed array[0..255] of char;
    sz_t1 : size_t;
  function strlen(pc_arg1 : pchar) : size_t;
    var
      pc1 : pchar;
      c1 : char;
      sz_t1 : size_t;
    begin
      c1 := chr(0);
      sz_t1 := 0;
      pc1 := pc_arg1;
      while pc1^ > c1 do
        begin
          sz_t1 := sz_t1 + 1;
          inc(pc1)
        end;
      
      strlen := sz_t1;
    end;
  begin
    write('文字列を入力 : > ');
    readln(str1);
    sz_t1 := strlen(str1);
    writeln('入力した文字列は ', sz_t1, ' バイトです')
  end.
(* Copyright (C) 2005 データボックス, All Rights Reserved. *)
386デフォルトの名無しさん:2005/08/18(木) 01:26:14
う?
387デフォルトの名無しさん:2005/09/04(日) 11:44:45
pascalで参照型ってあんまり使わない方がいいのか?
388デフォルトの名無しさん:2005/09/05(月) 16:39:38
>>387
参照型ってなんだっけ?
389デフォルトの名無しさん:2005/09/05(月) 21:02:19
ポインタ
390デフォルトの名無しさん:2005/09/05(月) 23:11:56
ポインタを使わないほうがいい理由なんてあるの?
391デフォルトの名無しさん:2005/09/05(月) 23:17:27
つかうと分かり辛くなるかもしれない
392デフォルトの名無しさん:2005/09/07(水) 19:36:02
たしかにわかりづらくなるかもしれないなぁ。
ってか理解できない奴にはほんと、女の心よりワケワカメ。

俺も理解するのに1ヶ月ぐらいかかった。
クラスは2ヶ月かかった。
393774RR:2005/09/09(金) 19:26:06
Pascalみたいな小規模な言語で「使わない方がいい」ものなんてないよ。
ポインタは番地なんつーあぶねーものを陽に使わなくてもいいように
?hぃると御大が用意してくれたんだからガンガン使おう。
394デフォルトの名無しさん:2005/09/09(金) 21:14:57
>>393
(^Д^)9 プギャー
395デフォルトの名無しさん:2005/10/06(木) 00:56:05
必要あればつかうだろ。使うか使わないかの判断迫られるときなんてある?
使うときは必然的につかうけどなあ。
396デフォルトの名無しさん:2005/10/06(木) 17:08:52
PL/0の宿題もアリですか?
397デフォルトの名無しさん:2005/10/06(木) 17:51:05
すいません質問です。
計算したい式を入力して値を返すというプログラムをつくりたいのですが、
まず仮に(3+3)+3と言う式を計算しようと考えました。
以下がそのプログラムです。

398デフォルトの名無しさん:2005/10/06(木) 17:53:28
program computation (input,output);
const n=100;
type string=string[n];
var letter:string;
a,i,max,min,result:integer;
begin
writeln('数式を入力してください。');
readln(letter);
i:=0;
while letter[i]<>')' do begin
i:=i+1;
end;
max:=i;
i:=0;
while letter[i]<>'(' do begin
i:=i+1;
end;
min:=i;

i:=min+1;
while i<=max-1 do begin
if letter[i]='+' then
result:=ord(letter[i-1])+ord(letter[i+1])-48*2
else i:=i+1;
end;

a:=result+(ord(letter[7])-48);
writeln(a);
end.
(テストなのでまだ一般性のあるものに仕上がっていません。申し訳ありません)
399デフォルトの名無しさん:2005/10/06(木) 17:56:12
コンパイルはできるのですが、プロセッサの使用量が100%になってEnterキーをおしても
何も起きません。
全くもってわかりません。。。ご教授お願いいたします。
400デフォルトの名無しさん:2005/10/06(木) 19:15:29
>>399
> while i<=max-1 do begin
> if letter[i]='+' then
> result:=ord(letter[i-1])+ord(letter[i+1])-48*2
> else i:=i+1;
> end;

letter[i] = '+' になると
while 〜
 if 〜
  result 〜
の3行で無限ループしてる。
401デフォルトの名無しさん:2005/10/06(木) 19:38:28
あと、Ord(letter[i]) はおかしい。
Ord(Char型)は文字コードを返す。
文字(列)を数値にしたいなら IntToStr。
402401:2005/10/06(木) 19:41:03
あ、スマン。
-48とかで直してるのか。
忘れてくれ。
403397:2005/10/07(金) 00:10:33
あ、、、、、、足し算を延々にやってますね・・・これは。。。
ありがとうございました!!

20日提出なのでまたお世話になると思いますが、宜しくお願いしたします。
404デフォルトの名無しさん:2005/10/11(火) 23:11:36
すいません。考えましたがなかなかコンパイルできないので質問に来ました。宜しくお願いします。
次の2つの問題なんですが教えてください。よろしくお願いします。
【1】
2行2列の行列AおよびBを考える。これらの行列の各要素を手動で入力、掛け算を実施し、
その結果を表示させるプログラムを配列(array)を用いて作成せよ。
【2】
20名以下の任意数の学生が受験した試験の結果を読み込み、平均点を計算して出力するプログラムを作成せよ。
平均点が、
80点以上ならば「問題が簡単すぎた」
65−80点ならば「適切」
65点以下ならば「難しすぎた」
と出力せよ。
*受験者数は、自分で入力すること。極力、配列を使用すること。
405デフォルトの名無しさん:2005/10/12(水) 01:51:46
404サンへ
これじゃあコンパイルできませんよ^^;
まずはPascalプログラムの基本的な構造を勉強してみてはいかがでしょう(^o^)/
406デフォルトの名無しさん:2005/10/12(水) 18:48:07
>なかなかコンパイルできない

ワラタ
407デフォルトの名無しさん:2005/10/15(土) 17:40:56
>>398
たぶんいるだろうなとは思ってましたが学校・・・というかクラス同じっぽいですね。
お互い頑張りましょう。
408デフォルトの名無しさん:2005/10/15(土) 18:27:19
>>404
program gyouretsu(input,output);
var a,b,c : array [1..2,1..2] of integer;

begin
read(a[1,1],a[1,2],a[2,1],a[2,2]);
writeln;
writeln('':1,a[1,1],'':1,a[1,2]);
writeln('':1,a[2,1],'':1,a[2,2]);
read(b[1,1],b[1,2],b[2,1],b[2,2]);
writeln;
writeln('':1,b[1,1],'':1,b[1,2]);
writeln('':1,b[2,1],'':1,b[2,2]);

c[1,1] := a[1,1] * b[1,1] + a[1,2] * b[2,1];
c[1,2] := a[1,1] * b[1,2] + a[1,2] * b[2,2];
c[2,1] := a[2,1] * b[1,1] + a[2,2] * b[2,1];
c[2,2] := a[2,1] * b[1,2] + a[2,2] * b[2,2];
writeln;
writeln('':1,c[1,1],'':1,c[1,2]);
writeln('':1,c[2,1],'':1,c[2,2]);
end.
409デフォルトの名無しさん:2005/10/15(土) 18:28:28
program exam(input,output);
const n=20;
var score : array [1..n] of integer;
number : integer;
i,amount : integer;
average : real;

begin
amount := 0;

writeln('受験者数を入力してください');
read(number);

writeln('点数を入力してください');
for i:=1 to number do
begin
read(score[i]);
amount := amount + score[i];
end;
average := amount/number;

case trunc(average) of
1..64 : writeln('難しすぎた');
65..79 : writeln('適切');
80..100 : writeln('問題が簡単すぎた');
end;
end.

手続きが分かるなら一つ目はそれを使ったほうがスッキリするかも。
410デフォルトの名無しさん:2005/10/17(月) 00:32:03
いろいろ考えたのですが、今の自分には一生考えてもできそうにないのでお願いします。
本当に申しわけありませんが10/20までなのでよろしくお願いします。

出納帳プログラム
・メインプログラムを手続き、関数で組み立てる。
・作業用の変数はなるべく手続きの中に含める
・収入、支出を表すデータをレコード型itemとして定義する。
 項目名(head:16文字),金額名(price:整数),日付(dating:date型)
・item型の配列を宣言し,配列に一回ごとの収入あるいは支出のデータを格納
・機能はデータの入力、1日の収支の表示、月ごと年ごとの計算、検索、ソートなど各自考えよ。
411410:2005/10/17(月) 00:32:42
出納帳のプログラムの未完成のものです。これを完成させれば良いそうです。
program kadai(input,output);
type slip=record end;
table=array[1..10] fo slip;
var data : table;
count : integer;
query : char; ……;

procedure nyuryoku(var a:table; cnt:integer);
……;
procedure hyoji(a:table; cnt:integer);
……;
procedure kennsaku(a:table; key:integer);
……;
procedure sort ……

begin
readln(query)
while query <> `e` do begin
case query of
`a`:nyuryoku(data,count);
`b`:hyoji(data,count);
`c`:kensaku(data,day);
`d`:sort(data);
end;
readln(query)
end;
end.
412デフォルトの名無しさん:2005/10/17(月) 00:35:14
日本円を他の国の通貨に換算するプログラムを記述せよ。
という問題で、5ヶ国ぐらいあるんですが、換算する国の番号を何故かアルファベットで入力しないといけません。
こういう場合どのようにしたらいいのでしょうか。小一時間考えたのですが、思いつきませんでした。
413410:2005/10/17(月) 00:55:45
>>404
var 変数名:char;
とすればよいと思います

ちなみに入力の部分だけはできたのですが…
type date = record
year:integer;
month:1..12;
day:1..31;
end;
item = record
head:packed array[1..16] of char;
price:integer;
dating:date;
end;
var syuusi:packed array[1..1000] of item;
i,n,x,y:integer;
g:char;
begin
x:=0; i:=0;
writeln('何項目入力するか入力して下さい');
readln(n);
for i:= 1 to n do begin
with syuusi[i] do begin
writeln(i,'項目目');
writeln('項目名を入力して下さい');  readln(head);
writeln('収入、支出を入力して下さい 支出の場合はマイナスをつけて下さい'); readln(price);
writeln('年を入力して下さい');   with dating do readln(year);
writeln('月を入力して下さい');   with dating do readln(month);
writeln('日を入力して下さい');   with dating do readln(day);
end;end;
414410:2005/10/17(月) 00:56:53
間違えました
>>412
415デフォルトの名無しさん:2005/10/17(月) 01:09:59
>>410
君が一生考えても無理な問題を君に課すとはどんな指導者ですか
416デフォルトの名無しさん:2005/10/17(月) 01:11:27
>>413
charでやってみたのですが、途中で止まってしまいます・・・
program calc(input, output);
var
menu : char;
japyen : integer;
exyen : real;
begin
writeln('This program converts Japanese yen into the currency of other countries. ');
writeln;
writeln('******************************');
writeln('d == US Doller');
writeln('p == British Pounds');
writeln('g == Chinese Yuan');
writeln('e == Euro');
writeln('r == Russian Ruble');
writeln('******************************');
write('Exchange to : ');
readln(menu);
write('Enter the amount of money in Japanese Yen : ? ');
readln(japyen);

case menuasc of
d :
begin
exyen:=japyen / 118.94;
writeln('USD = ',exyen:2:2);
writeln;
writeln('End of Job.');
end;
end;
end.
417デフォルトの名無しさん:2005/10/17(月) 01:14:52
連レスすいません
case menuasc of はcase menu ofの間違いです。
418デフォルトの名無しさん:2005/10/17(月) 01:31:51
>>416
'd' :
begin
とすればできます。
419デフォルトの名無しさん:2005/10/17(月) 01:44:30
>>418
何故か止まってしまいます・・・
金額を入力した時点でエラーになるようです
420デフォルトの名無しさん:2005/10/17(月) 17:04:53
421デフォルトの名無しさん:2005/10/17(月) 18:01:29
>>419
問題なく動くが。
422デフォルトの名無しさん:2005/10/17(月) 22:04:17
>>421,418
何故か動かないのでord関数を使って数字に直した後case文で書きました。
せっかく教えていただいたのに申し訳ありません。

ところで、勝手に繰り上げされるのを防止するにはどうしたらいいのでしょうか?
8.408という数字を2桁表示すると、8.41に繰り上げられてしまうのです・・・
423デフォルトの名無しさん:2005/10/18(火) 13:50:09
100倍してinteger化してreal化して100で割る
424デフォルトの名無しさん:2005/10/18(火) 14:35:42
pascalの授業って教授の趣味なの?
delphi使いになることを想定してのことなのかな。
425デフォルトの名無しさん:2005/10/18(火) 18:47:58
Cの授業って教授の布教活動なの?
MSの狗になることを想定してのことなのかな。
426デフォルトの名無しさん:2005/10/18(火) 18:54:45
pascal は教育用の言語なのだ
Cが動くのはWinだけではない
427デフォルトの名無しさん:2005/10/18(火) 20:16:12
404さんはおそらく愛知県内の某工業大学の生徒さんだな。
レス貰ったんだからお礼言おうよ・・・orz

えっと質問です
配列とリダイレクション(?)を使った問題なのですが、
「指定した個数(n)の数字群から最大値を表示させる」という問題で、
dataという無数の数字群のファイルを、n個の配列に読ませて
最大値を判断するのですが、

≫program < data という風に実行すると、
本来、自分で入力するべき数字の数nも、
dataから読み取られてしまうのです。
このような現象が起きないようにするためには、
どうすればいいでしょうか? (長文ゴメナサイ)
428397:2005/10/18(火) 21:50:47
再び質問です。
もう提出期限が迫っているのでヒントではなく答えを教えていただけたら幸いです。
プログラムの内容は全開と同じで
「一桁の正数からなる足し算、掛け算及び括弧をつかった式を入力してその答えを返すプログラムを作れ
」というものです。

1+1+(1+(1+1*1))+1などはできるのですが、2+2*(1+1)*3*(1+1)などができません・・・
どうやっていいのかわかりません。。。

自分が今まで作成したプログラムは以下です。
429397:2005/10/18(火) 22:10:09
program test (input,output);
const n=100;
type string=string[n];
table=array[0..100]of integer;
var letter:string;
a,i,x,k,l,z,fin,finalans:integer;
result,ans:table;
t:boolean;


(*掛け算開始*)
procedure multiply(i,fin:integer;t:boolean;var letter:string;var x:integer;var result:table);
begin
repeat
repeat
i:=i+1;
until (letter[i]='*');
if i>=100 then
t:=false;
if t=true then begin
result[x]:=(ord(letter[i-1])-48)*(ord(letter[i+1])-48);
letter[i-1]:='0';
letter[i]:='0';
letter[i+1]:='0'
end;
430397:2005/10/18(火) 22:11:45
(*掛け算が続いていた場合*)
repeat
i:=i+2;
if letter[i]='+' then
t:=false;
if letter[i]=')' then
t:=false;
if t=true then begin
if letter[i]='*' then begin
result[x]:=result[x]*(ord(letter[i+1])-48);
end;
end;
until t=false;
x:=x+1;
until i>=fin;
end;
431397:2005/10/18(火) 22:12:51
(*足し算開始*)
procedure addition(i,fin:integer;t:boolean;var letter:string;var x:integer;var result:table);
begin
repeat
repeat
i:=i+1;
until (letter[i]='+');
if i>=100 then
t:=false;
if t=true then begin
result[x]:=(ord(letter[i-1])-48)+(ord(letter[i+1])-48);
writeln('r[', x, ']: ', result[x]);
x:=x+1;
letter[i-1]:='0';
letter[i]:='0';
letter[i+1]:='0';
end
until i>=fin;
end;
432397:2005/10/18(火) 22:14:07
(*合計開始*)
procedure resultadd(x:integer;var result:table;var l:integer;var ans:table);
var
k:integer;
begin
k:=1;
for k:=1 to x-1 do begin
ans[l]:=ans[l]+result[k];
writeln('r',result[k]);
end;
for k:=1 to x-1 do begin
result[k]:=0;
end;
writeln('ANS:',ans[l]);
l:=l+1;
end;
433397:2005/10/18(火) 22:15:13
(*括弧の中の計算*)
procedure priority(i,x:integer; t:boolean;var result:table;var letter:string;var ans:table);
var
eol,sol:integer;
begin
repeat
i:=i+1;
until letter[i]=')';
if i>=100 then
t:=false;
if t=true then begin
eol:=i;
repeat
i:=i-1;
until letter[i]='(';
sol:=i;
letter[sol]:='0';
letter[eol]:='0';
multiply(i,eol,t,letter,x,result);
addition(i,eol,t,letter,x,result);
resultadd(x,result,l,ans);
i:=sol;
if letter[i-1]='*' then begin
ans[l-1]:=ans[l-1]*(ord(letter[i-2])-48);
sol:=i-2;
end;
priority(i,x,t,result,letter,ans);
end;
end;
434397:2005/10/18(火) 22:23:17
(*最終合計*)
procedure finalanswer(l:integer;ans:table;var finalans:integer);
var
i:integer;
begin
writeln('L:',l);
for i:=1 to (l-1) do begin
finalans:=finalans+ans[i];
writeln('ANS:',ans[i]);
end;
writeln;
writeln;
write('この式の答えは「');
write(finalans);
writeln('」である');
end;


435397:2005/10/18(火) 22:23:56
(*本文開始*)

begin
writeln('数式を入力してください');
readln(letter);
i:=1;
l:=1;
x:=1;
z:=0;
t:=true;
ans[0]:=0;

priority(i,x,t,result,letter,ans);
multiply(i,n,t,letter,x,result);
addition(i,n,t,letter,x,result);
resultadd(x,result,l,ans);
finalanswer(l,ans,finalans);

end.
436397:2005/10/18(火) 22:32:20
今気がついたんですが、確認のための余計なwritelnまでかいてしまい申し訳ありません。

あと「1+1*1」のように掛け算が最後に来てるときにバグが生じてかえす値がおかしくなってしまいます。。。1+1*1+1は「3」とかえしてくれるのですが。。。

連投してスレを汚してしまったのですが、ご教授いただけたら幸いです。
437397:2005/10/18(火) 23:28:29
スイマセン。>>436で「1+1*1」のかえす値にバグがあるといったのですが、直せました。
以下が改訂版です。

本当に申し訳ありませんでした。

(*掛け算が続いていた場合*)
repeat
if letter[i+2]<>'*' then
t:=false;
if letter[i+2]='*' then begin
i:=i+2;
result[x]:=result[x]*(ord(letter[i+1])-48);
end;
until t=false;
x:=x+1;
until i>=fin;
end;
438デフォルトの名無しさん:2005/10/19(水) 00:43:11
丸投げすいません
「正の整数iとjが入力されたとき、その最小公倍数と最大公約数を求めるプログラムを作成しなさい」
よろしくお願いします。
439デフォルトの名無しさん:2005/10/19(水) 01:35:36
例として2*2*(2+2)を考えると、カッコ内の計算で足し算が行われresult[x=2]=4になってるのはいい。
そしてans[1]=4にもなってる。
その後カッコの前に*があるからans[l=1]:=ans[1]*2が実行されてans[l=1]=8。
それから本文中で2*2*0000という計算を開始してんだけど、まず2*2を実行してresult[x=1]=4、
その後*が続いてるから4*0を実行し、result[x=1]=0。
よってans[l=2]=0になってる。
最終的にans[1]+ans[2]=8。
これが答えと出力されている。
やりたいことはなんとなく分かるんだけどどうすればいいのかを言えるほどはよく分かってない。
でもとりあえずカッコをなくした時点でのの計算が2*2*0000になってるのはよろしくないかと思う。
カッコの前に掛け算が2つ以上続いた場合、とか作るとこの場合なら計算できそうだけど。

でも(2+2)*2*(2+2)とかになるとまた問題が生じるのかな?

説明が分かりにくいけどゴメン、明日の1限はテストなんだ。
440439:2005/10/19(水) 01:37:27
一応407=439です
441デフォルトの名無しさん:2005/10/19(水) 01:40:45
>>397
「再帰下降法」でも良いのかな?
program f(input, output);

function Eval: Integer;
var C: Char;

 procedure ReadChar;
 begin
  Read(C);
 end;

 function Expression: Integer;
 var X: Integer;

  function Term: Integer;
  var X: Integer;

   function Factor: Integer;
   begin
    if C in ['0'..'9'] then begin
     Factor := Ord(C)-Ord('0');
     ReadChar;
    end else if C = '(' then begin
     ReadChar;
     Factor := Expression;
     if C=')' then ReadChar else writeln('括弧が閉じられてないよ');
    end else begin
     writeln('不正な入力: ',C); Factor := 0;
    end;
   end;
442デフォルトの名無しさん:2005/10/19(水) 01:42:18
  begin
   X := Factor;
   while C = '*' do begin
    ReadChar;
    X := X* Factor;
   end;
   Term := X;
  end;

 begin
  X := Term;
  while C='+' do begin
   ReadChar;
   X := X + Term;
  end;
  Expression := X;
 end;

begin
 ReadChar;
 Eval := Expression;
end;

begin
 writeln(Eval);
end.
443439:2005/10/19(水) 03:21:27
>>441-442
神々しいですね・・・
真夜中に感動しました。
寝付けないかもしれません。
444397:2005/10/19(水) 13:39:43
>>441-442
こんな手法思いつきすらしませんでした・・・

ありがとうございました!!神よ!!!
僕の命がつながりました!!!!!!
445439:2005/10/19(水) 19:26:23
こんなのをプログラミングを始めて半年やそこらの人間が提出して問題なくスルーされるのだろうか。
将来を嘱目されるのは間違いないんじゃない。
446デフォルトの名無しさん:2005/10/19(水) 20:37:00
handai
447397:2005/10/19(水) 21:07:12
本当に何回も聞いてしまって申し訳ないと思っているのですが、また質問です。。。はい・・・
やはり>>445さんのいうようにばれちゃう可能性があると思ったので、自分なりにもう一度改変してみました。

しかしやはり括弧の処理がどうもうまく行きません。
(1+1)や1+(1+1)などはうまく行くのですが(1+1)+1や(1+1)+(1+1)がうまく行きません。

これがうまく行ったら前レスで質問していた
(1+1)*2*(1+1)とかもうまく行くと思うのです。
もう丸投げします・・・

一応改訂版のプログラムをはります。
また連投になってしまうのですが申し訳ありません。
足し算・掛け算・その他のアルゴリズムにエラーはありませんでした。

あと
>>446さん、正解です
448397:2005/10/19(水) 21:15:57
program test (input,output);
const n=100;
type string=string[n];
table1=array[0..100]of integer;
table2=array[0..100]of char;
var tmp:string;
i,k,fin,eol:integer;
num:table1;
let:table2;
t:boolean;
(*空白を飛ばす*)
procedure closetmp(n:integer;t:boolean; var tmp:string);
var
a,emps,empe:integer;
begin
a:=0;
repeat
repeat
a:=a+1;
until tmp[a]=' ';
if a>=n then
t:=false;

if t=true then begin
emps:=a;
repeat
a:=a+1;
until tmp[a]<>' ';
end;
449397:2005/10/19(水) 21:16:48
if a>=n then
t:=false;
if t=true then begin
empe:=a;
tmp[emps]:=tmp[empe];
tmp[empe]:=' ';
a:=emps
end;
until t=false;
end;

(*分割*)
procedure divide(i,n:integer;tmp:string;var num:table1;var let:table2);

begin
repeat
if tmp[i] in ['0'..'9'] then begin
let[i]:='0';
num[i]:=ord(tmp[i])-48;
end
else begin
let[i]:=tmp[i];
num[i]:=0;
end;
i:=i+1;
until i>=(n+1);

end;
450397:2005/10/19(水) 21:18:00
(*文字列を詰める*)
procedure closelines(n:integer;var num:table1;var let:table2);
var
i,k:integer;
begin
i:=0;
repeat
i:=i+1;
if (ord(let[i])-48)=num[i] then begin
k:=i;
repeat
let[k]:=let[k+1];
num[k]:=num[k+1];
k:=k+1;
until k>=n;
i:=0;
end;
until i>=n;
end;
(*掛け算開始*)
procedure multiply(t:boolean;i,fin:integer;var num:table1;var let:table2;var eol:integer);
var
k:integer;
begin
k:=i;
repeat
repeat
k:=k+1;
until (let[k]='*');
451397:2005/10/19(水) 21:19:11
if k>=fin then
t:=false;
if t=true then begin
num[k-1]:=num[k-1]*num[k+1];
let[k-1]:='0';
let[k]:='0';
let[k+1]:='0';
num[k+1]:=0;
num[k]:=0;
closelines(n,num,let);
k:=i;
eol:=eol-2;
end;
until k>=fin;
end;
(*足し算開始*)
procedure addition(t:boolean;i,fin:integer;var num:table1;var let:table2;var eol:integer);
var
k:integer;
begin
k:=i;
repeat
repeat
k:=k+1;
until (let[k]='+');
452397:2005/10/19(水) 21:20:07
if k>=fin then
t:=false;
if t=true then begin
num[k-1]:=num[k-1]+num[k+1];
let[k-1]:='0';
let[k]:='0';
let[k+1]:='0';
num[k+1]:=0;
num[k]:=0;
closelines(n,num,let);
eol:=eol-2;
k:=i;
end;
until k>=fin;
end;
(*括弧の中の計算*)
procedure priority(n:integer; t:boolean;var num:table1;var let:table2);
var
i,eol,sol:integer;
begin
i:=0;
repeat
i:=i+1;
until let[i]=')';
453397:2005/10/19(水) 21:22:08
if i>=n then
t:=false;
if t=true then begin
eol:=i;
repeat
i:=i-1;
until let[i]='(';
sol:=i;
multiply(t,sol,eol,num,let,eol);
addition(t,sol,eol,num,let,eol);
let[sol]:='0';
let[eol]:='0';
closelines(n,num,let);
end;
end;
(*最終合計*)
procedure finalanswer(num:table1);
var
i:integer;
begin

writeln;
writeln;
write('この式の答えは「');
write(num[1]);
writeln('」である');
end;

454397:2005/10/19(水) 21:23:39
(*本文開始*)
begin
writeln('数式を入力してください。');
readln(tmp);
i:=1;
eol:=1;
t:=true;

closetmp(n,t,tmp);
divide(i,n,tmp,num,let);
priority(n,t,num,let);
multiply(t,i,n,num,let,eol);
addition(t,i,n,num,let,eol);
closelines(n,num,let);
finalanswer(num);

end.
455397:2005/10/20(木) 04:40:38
スイマセンでした。12時間以上かけた結果、何とかなりそうな予感です。
あくまで予感ですが。。。

連投に連投を重ね、真に申し訳ありませんでした!

考えてくださった方々本当にありがとうございました!!
456デフォルトの名無しさん:2005/10/26(水) 00:51:55
>427
よく知らないからもっとうまい方法あるんだろうけど。

#! /bin/sh
echo $1 > tmp
cat $2 >> tmp
program < tmp
rm tmp

というshコマンドを作る。
コマンドの第一引数に数値の数、第二引数にデータファイル名を指定する。
これを test.sh という名前で作ったとしたら
ファイル"data"から50個の数値を使う場合

test.sh 50 data

とする。
やってる事は第一引き数を tmpというファイルに書き出し、
第二引き数で指定されたファイルの内容を"tmp"に追加書き出し。
これを入力ファイルとして 'program'を起動する。
最後に"tmp"ファイルを消去する。
457デフォルトの名無しさん:2005/10/29(土) 10:05:34
最近の.net対応のdelphiでは.netのデレゲートはどうやって扱うのですか?
458デフォルトの名無しさん:2005/11/05(土) 14:57:47
今日明日と忙しいのに課題が…!!!
はっきり言って超初心者です。忙しいので時間がないのでここにくる余裕がないかもしれません。
しかも、自パソが現在使えないので携帯からです。
かなりヤバい状況なので、一緒に考えて下さるとありがたいです。
一応課題を書いておきます。

課題1
数列を読み込み、バブルソートによってソートし、途中経過及び最終結果を表示するプログラムを作成せよ。また、正しく動作していることを示す実行結果を添付せよ。
課題2
プログラム例(時間がある時にかきます)を元にして、クイックソートのプログラムを完成させよ。また、正しく動作していることを示す実行結果を添付せよ。
課題3
マージ(merge)ソートについて調べて、他の課題と同様のプログラムを完成させよ。また、正しく動作していることを示す実行結果を添付せよ。

プログラム例などがあるのは、時間をみつけて書き込みます。よろしくお願いします。
459デフォルトの名無しさん:2005/11/05(土) 16:19:45
Delphi6Personalでファイル名をあたれられて動作するexeを作成したいんですが、
どのアプリが起動させたかを知る方法はありますでしょうか?
460デフォルトの名無しさん:2005/11/05(土) 21:33:45
>>459
それは宿題か? スレ違いではないのか?
461デフォルトの名無しさん:2005/11/06(日) 08:05:29
>>460 スレ違いなんですが、くだすれがてんぷれ作成中だったもんで
ちまよって宿題スレに書いてしまいました。
そういう訳でお願いします。
462PASCAL:2005/11/06(日) 13:46:03
次の問題を疑似言語PASCALで記述せよ。

1.学生番号と身長(cm)の組を多数入力し、入力したデータをそのまま出力する。
ただし、身長が180以上の場合だけ。”tail"という文字を横につけ加える。
入力データのストッパは、学生番号=身長=0とする。
(入力例) (出力例)
1001 168 1001 168
1002 176 1002 176
1004 182 1004 182 tail
0 0





463PASCAL:2005/11/06(日) 13:56:18
次の問題を疑似言語PASCALで記述せよ。

2.車種、数量、新車ー中古車の区分、の組からなる売り上げデータを多数
入力し、新車、中古車をそれぞれの数量合計を求めて出力する。入力のストッパ
は、車種が"END"であるとする。

(入力例)     (出力例)
civic 12 古  新車    7
sunny    8 古  中古車 20 
splinter 7 新   
END     0  0



464458:2005/11/06(日) 19:51:02
>>458
バブルソートのアルゴリズム

procedure sort(n: integer);
var
ループ制御用の変数i,jを宣言する;
その他、作業用の変数を宣言する;
begin
for i:=n-1 downto 1 do
begin
for j:=1 to i do
begin
もし A[j]>A[j+1]ならば
A[j]とA[j+1]の内容を交換する
end
end
end;

begin
{入力部}
ソートすべき要素の個数を読み込み、それをnとする;
n個の数を読み込み、順に配列Aへ格納する;
{ソート部}
sort(n); {配列A[1..n]をソートする}
{出力部}
配列A[1..n]の内容を書き出す
end.
465458:2005/11/06(日) 19:52:57
>>463の続き

上記のアルゴリズムを実現するプログラム中の適切な場所に

for k:=1 to n do
begin
write('A[',k:2,'] : ');
writeln(A[k])
end;

等を追加すれば、その時点での配列Aの内容を書き出すことになる。途中経過の確認などに役立つ。
変数jについてのループを1からiまでまわったときに、一度も交換が起こらなければ、配列全体はソート済みであるといえる。
そのときには、早めに処理を終了してもよい。このような終了条件を追加したバブルソートは、「ほとんどソート済みのデータ」に対しては速いアルゴリズムとなる。
466458:2005/11/06(日) 20:05:45
クイックソートのアルゴリズム(例)
program QuickSort(input,output);
var
ソート対象となる数列を格納するinteger型配列Aを宣言する;
要素数を表す変数nを宣言する;
その他、ループ制御用の変数を宣言する;

procedure sort(low,high : integer);{A[low..high]をソートする手続き}
var
分割の基準を表す変数bを宣言する;
探索の注目位置を表す変数i,jを宣言する;
その他、作業用の変数を宣言する;
begin
if low < high then {low = highならば要素が1つだけなのでソートする必要なし。}
begin
i:=low; {探索の初期位置を設定}
j:=high;
b:=A[low]; {分割の基準を設定}
467458:2005/11/06(日) 20:07:22
>>466の続き

repeat
while A[i] < b do {左側から探索してA[i]>= bとなる要素をみつける}
i:=i+1;
while A[i] > b do {右側から探索してA[j]<= bとなる要素をみつける}
j:=j-1;
if i<=j then
begin
A[i]とA[j]の内容を交換する;
i:=i+1; {探索の注目位置を進める}
j:=j-1
end
until i>j; {右からの探索と左からの探索がすれ違うまで探索する}
sort(low, j); {左側の部分数列をソートする}
sort(i, high) {右側の部分数列をソートする}
end
end;

begin
{入力部}
ソートすべき要素の個数のみを読み込み、それをnとする;
n個の数を読み込み、順に配列Aへ格納する;
{ソート部}
sort(1, n); {配列A[1..n]をソートする}
{出力部}
配列A[1..n]の内容を書き出す
end.
468458:2005/11/06(日) 20:08:39
>>458
>>464-467

よろしくお願いします
469デフォルトの名無しさん:2005/11/07(月) 00:54:53
>>462-463
マルチ
470デフォルトの名無しさん:2005/11/07(月) 12:11:27
 
471デフォルトの名無しさん:2005/11/08(火) 00:51:45
もしかして日本語で書くと解りやすいと思ってる?
472458:2005/11/08(火) 01:06:16
>>471
俺の話??
上に書いたプログラムは、プログラムのアルゴリズム例として配られたものをそのまま書きました
現在はプログラムは作り終えて、レポートに入るところです
Pat図をつけろとか、なにやら俺にはわかりませんがなんとかしようと思います
課題自体は上に書いた通りなんで、わからなくなったら助言願います
473デフォルトの名無しさん:2005/11/08(火) 01:21:46
>>472
なんていうか、問題作った奴センス無いな
474デフォルトの名無しさん:2005/11/08(火) 01:29:35
10文字以内の文字列を読み込み
1.全て大文字
2.最初の1文字のみ大文字、後は小文字
3.全て小文字
の3つを出力するプログラムを作成せよ。
(アルファベット以外の時はそのまま出力せよ)

という課題なのですが、function型かprocedure型を使って書かないといけません。
辛うじて1は出来たのですが、他がさっぱりです。
どうかよろしくおねがいします。
475458:2005/11/08(火) 02:04:46
>>473
そうなの??まあなんつうか講義は問題あるけどな
とりあえず授業はしてくれない。課題を与えて、やってってそれだけ
聞けば教えるって言ってるけど、何も知らんのに何聞けばええねん!!!
ごめんなさい。愚痴でした
476474:2005/11/08(火) 23:18:25
申し訳ありません、締め切りが迫っているので、どなたか教えていただけないでしょうか。
477デフォルトの名無しさん:2005/11/09(水) 00:05:07
気が向いたら誰かやるんじゃね
478デフォルトの名無しさん:2005/11/09(水) 00:35:45
>>474
function ToUpper(str: string): string;
begin
    result:= UpperCase(str);
end;

function ToUpper1stOnly(str: string): string;
var
    tmp:    string;
begin
    str:=LowerCase(str);
    tmp:=str[1];
    tmp:=UpperCase(tmp);
    str[1]:=tmp[1];
    result:=str;
end;

function ToLower(str: string): string;
begin
    result:= LowerCase(str);
end;
479474:2005/11/09(水) 12:41:37
>>478
申し訳ありません、よろしければ全部を作って欲しいのですが、だめでしょうか?
あと、stringはcharではだめなのでしょうか?実はそれしか習ってないのでstringは分からないのです・・・

pascalを全く分かってない阿呆な者でして・・・
すみませんが、よろしくお願いします。
480デフォルトの名無しさん:2005/11/10(木) 01:02:25
しょうがねぇなぁ
ほら、String使わないで作ったぞ

function First(const Source: PChar): PChar;
begin
  Result:= AnsiStrUpper(Source);
end;

function Second(const Source: PChar; var Dest: PChar; const Size: Integer): PChar;
var
  C: Array[0..9] of Char;
begin
  lstrcpy(C, Source);
  AnsiStrLower(C);
  if (C[0] in ['a'..'z']) then
    C[0]:= Chr(Ord(C[0]) - $20);
  Result:= lstrcpyn(Dest, C, Size);
end;

function Third(const Source: PChar): PChar;
begin
  Result:= AnsiStrLower(Source);
end;
481デフォルトの名無しさん:2005/11/10(木) 03:13:36
>C[0]:= Chr(Ord(C[0]) - $20);
Dec(C[0], $20)でいいような、

…って、宿題にDelphi拡張込みのコードはどうなんだろう。
Charしか習って無いというのは全部array[1..10] of charでやれってことでは。
そのための「10文字以内」だろうし。
482デフォルトの名無しさん:2005/11/10(木) 11:19:12
>>481
分かっててやってるんだろ
それくらい分かれ
483474:2005/11/10(木) 14:56:04
>>478,480
ありがとうございました!これでようやく宿題に目処が付けられます!
484デフォルトの名無しさん:2005/11/10(木) 21:14:51
>>459なんですが、宿題ということで教えてください。
485デフォルトの名無しさん:2005/11/10(木) 21:19:16
>>484
そもそも何がしたいのか読み取れん。
「ファイル名を与えられて」というからにはコマンドライン引数を受け取りたいのか、「どのアプリが起動させたかを」というからにはエクスプローラーから起動したならexplorer.exe、コマンドプロンプトから起動したならcmd.exeとかそういうのを知りたいのか。
何がやりたいわけ。
486デフォルトの名無しさん:2005/11/10(木) 21:46:35
スレ違いですいません。
>>485  はい。そのcmd.exeです。
 たとえば、cmd.exeなら与えられたファイルを処理するけど
 他のソフトがshellExecuteなどで
 myApp.exe "test.txt"させた場合は何もしないようにしたいんです。  
487デフォルトの名無しさん:2005/11/10(木) 22:00:29
簡単に済ますなら標準入出力が親から継承されてるとかかな。
ShellExecuteでもcmd.exe /c myApp.exe "test.txt"とかやられたら区別できない気もするけど。
厳密にやりたいならSDKのPROCESSENTRY32のあたりをうろついて親の親まで辿ってきゃいいかと。
488デフォルトの名無しさん:2005/11/10(木) 22:25:35
>>487 ありがとうございます。
僕には難しそうで断念しそうな感じですが、
だめもとでやってみようかと思います!
489名無し大学生:2005/11/11(金) 17:32:49
課題でこんなプログラムを作らなくてはなりません。:氏名(20名文字以内)、電話番号(15文字以内)、メルアド(30文字以内)をひとつのレコードとし、
1:氏名から番号と、メルアドを検索
2:番号から氏名と、メルアドを検索
3:メルアドから、氏名と番号を検索
というプログラムを作れと言われています。
レコード件数は30件で、テキストファイルを作れと言われています。はっきり言うてまったくわかりません。
どうか力を貸してください。Record文とCase文を使うようです。
490デフォルトの名無しさん:2005/11/11(金) 18:46:28
>>489
Accessとかで作ったらまずいの?
491デフォルトの名無しさん:2005/11/11(金) 19:56:08
>>489
DelphiのPro以上を購入。
まずDatabase Desktopを起動して項目を設計する。
Delphiを起動してデータベース関係のコンポーネントを貼りまくる。
テキストファイルを扱うデータベースのドライバもあるし、何の問題も無い。
最後に申し訳程度にrecordとcaseをどこかに書いて終了。
492デフォルトの名無しさん:2005/11/12(土) 19:00:29
>>474
>>489
同じ大学だw

とりあえず
氏名 packed array[1..20]
電話 packed array[1..15]
メル packed array[1..30]

をレコードでまとめて
レコードをarrayにして

for でまわしながら入力すればできる

検索は検索したい名前を入力のあとその名前と登録した名前が一致するまで
for文で繰り返して一致したら表示するようにつくればよし

それをcase文でまとめろ

あと3日もあればできるだろw
493デフォルトの名無しさん:2005/11/13(日) 01:14:38
標準PASCALで時間って測れる?
494デフォルトの名無しさん:2005/11/13(日) 22:05:23
>>492
検索部分が分かりません・・・
宜しければ詳しく教えていただけないでしょうか。
495デフォルトの名無しさん:2005/11/13(日) 23:56:08
for i := 0 to データ数 - 1 do
 if i番目のデータ.名前 = 検索したい名前 then
  WriteLn('ウヒョー');
496デフォルトの名無しさん:2005/11/14(月) 00:11:04
自己解決しました。
497名無し:2005/11/14(月) 17:43:29
474のプログラムで、全文字を検索するプログラムを作りたいのですが。。。詳細よろしく!
498デフォルトの名無しさん:2005/11/14(月) 17:55:52
全文字って何?
499%96%bc%96%b3%82%b5:2005/11/14(月) 18:10:16
例えばfd,f,fと設定しておいて、fと入力すると、fd,f,fの3つすべての結果がでるようにしたいです。
つまり、検索対象の先頭の文字(番号)を入力しただけでも検索ができることです。
500デフォルトの名無しさん:2005/11/14(月) 18:28:02
search : packed array[1..30] of char;
db云々は講義聴いてたら分かるよね。

if (search[1]=db[i].mail[1]) then
begin
検索結果を表示
end;
これで1文字目だけを検索するよ。
ただ、a,ab,abcと設定しておいてabcを検索しても、
a,ab,abcの3つが検索結果として出てきちゃうけどね。
あとは頑張ろう。
501%96%bc%96%b3%82%b5:2005/11/14(月) 18:35:23
マジメなはなし、dbの意味がわかりません・・・
502%96%bc%96%b3%82%b5:2005/11/14(月) 18:55:45
それと、例えば、bag big boxと名前を決めて、bagと入力しても他の2つまで出てしまいます。どうすればいいのでしょうか?
503デフォルトの名無しさん:2005/11/14(月) 19:16:51
>>502
       /::^'´::::::::::::i、::::::::::::::::::::::::::::\
     ‐'7::::::::::::::::::::::::ハ:ハ::|ヽ:::;、::::::::::::丶
     /::::::::::::::/!i::/|/  ! ヾ リハ:|;!、:::::::l
    /´7::::::::::〃|!/_,,、   ''"゛_^`''`‐ly:::ト   
      /|;ィ:::::N,、‐'゛_,,.\   ´''""'ヽ  !;K
        ! |ハト〈  ,r''"゛  ,       リイ)|    死ねばいいと思うよ
          `y't     ヽ'         //
         ! ぃ、     、;:==ヲ   〃     
         `'' へ、   ` ‐ '゜   .イ
              `i;、     / l         
                〉 ` ‐ ´   l`ヽ
            / !        レ' ヽ_
504489:2005/11/15(火) 01:14:56
                 /゚    。
                / .  ゚
           , '    。  ・
` ー  _   -  '   ゜
。       .      。  ゚
    :     。
゚             .
  ヾ冖フ  ヾス
   [ ,]   [ ]     、_ノ、_人_人_人_人_人_人_人_人_人_人_
   |. i /l,ィ .!     ノ
.   !  }.r`'j7 !    _)  皆オラに宿題を教えてくれ!!
   ! `、亠 {     ヽ
    } _l _,l_,j      '^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^
    ヽシ_,-i {
     /`´~バ}
.   /   j !
    ∧ '"/`,イ
   ! ヽ'/l_  j
  / \,/ }\,!
  .ァ、ヽィ  <`-イ
.  |. `iT.   ヽ j
  \ll'    `'
505489:2005/11/15(火) 01:23:25
             /ヽ       /ヽ
            /  ヽ      /  ヽ
  ______ /     ヽ__/     ヽ
  | ____ /           :::::::::::::::\
  | |       / /      \   :::::::::::::::|
  | | var | (●      (●    ::::::::::::::| < 今日の19時が期限なの…
  | |  aho : int| ∪      ∪   :::::::::::::|
  | |  Data: cha|   (__人__丿  .....:::::::::::::::::::/
  | |____ ヽ      .....:::::::::::::::::::::::<
  └___/ ̄ ̄       :::::::::::::::::::::::::|
  |\    |            :::::::::::::::::::::::|
506デフォルトの名無しさん:2005/11/15(火) 01:30:25
コレが噂のデスマーチって奴ですかw
507デフォルトの名無しさん:2005/11/15(火) 08:23:58
>>489
とりあえず何がわからないんだ
上に書いてるのを使えばできると思うが
俺はとっくに出来てるから出してくるわw

>>502
俺はそこはこだわらないからやってないが
if (search[1]=db[i].mail[1]) then
begin
検索結果を表示
end;

ifを大きくfor 1 to 桁 do
でできないか?
508%96%bc%96%b3%82%b5:2005/11/15(火) 12:39:37
できないよ〜涙
509デフォルトの名無しさん:2005/11/15(火) 15:48:30
>>508
だから、出来る/出来ないでなくて、何がわからないのか、何処で躓いているのかを書いてくれ。
510デフォルトの名無しさん:2005/11/15(火) 16:58:47
後2時間、いよいよ押し迫って参りました。
511デフォルトの名無しさん:2005/11/15(火) 18:17:14
>>508
仕方ないあと50分だから助言

var name:packed ar(ry

readln(name);したあとに

for i:=1 to 20 do
begin
if nameの一文字目が文字の場合
文字数に+1

これで検索した文字数がわかるから
次にmeiboの全員を検索する
for i:=1 to 30 do
begin
それから
その検索名の一文字目と検索する対象の一文字目があってるかを調べて
あってたらAにでも+1してあってなかったらスルー
そうすれば全部あってる場合
検索の名前の数=対象の調べた文字
になるからそうなったやつを全部表示すれば対象の文字に例えば調べた文字が
woだとしても
word
world
の二つが引っかかるようになる
俺の提出したやつはそういうやり方だから全部は言えないなw
512デフォルトの名無しさん:2005/11/15(火) 20:00:13
             ,. - ─── - 、
             /    ,       `ヽ.
            /〃//,. ,ィl/|l ト、 !、 、  ヽ
          ー'´| | l |1 | !l. l| ! | l.|ヽ ! !、 ',
             YレV!ヒエ「! |l.「_ト!Ll」| l l  l
           ! lハイJ |  ´|_jヽ. リ,! ! l. l |   >>511
             |l |l.} ー ,   L _,ハl.lトl l. | l   日本語が不自由なの?
             |l ilト、   n  ''  ,1l|ィ| |l l |
           _ 二,ニ^tュ--ェ_t1」l.|l !リ|_lノ
       r7´   f r┐| 〔/ミヽ>,-、 ̄´
       Y       ー个‐'t  ハ-、_'ゝ、
        ヽ ._・ rく ̄ヽト-'丿  ヽ l
        / (・__,)ゝi┬'´ハ`     '`|
513デフォルトの名無しさん:2005/11/16(水) 12:58:24
>>503 >>504 >>505 >>512
AAは他のスレでやろうな
514名無し@困った大学生:2005/11/18(金) 19:03:34
次のプログラムの点線の間を改造して提出しなくてはなりません。このプログラムは、人数を選んで、名前を入力すると、その名前がでてきて、今の時点では、その結果に名前を一人入力して、既に出ている結果の何番目にその名前を追加するかというものです。
そのプログラムを、名前を入力すると、自動で、アルファベット順に並べてくれます。例:aさんbさんeさんと並んでいて、dさんを入力すると、bとeの間に追加されるという事です。
ただし、あらかじめ入力する名前はアルファベット順でよいと言う事です。
function文などを追加する場合は、点線以外に追記してもよいらしいです。せめてヒントだけでもいいんでよろしくお願いします!
515デフォルトの名無しさん:2005/11/18(金) 19:07:04
改造してということは
元となるプログラムがないとどうともいえないかと
516デフォルトの名無しさん:2005/11/18(金) 19:24:13
これが大学生の日本語か・・・

既にあるプログラムの指定箇所を改造して提出しなければなりません。
現状では、人数と名前のリストを入力すると、入力した名前が出力され
また、更に名前を入力すると、その名前のリスト中のインデックスを出力します。
                   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
このプログラムの下線の部分を、アルファベット順で適切な位置に挿入するように修正したいのです。
ただし、予め入力されている名前のリストは、既にアルファベット順に並んでいて良いものとします。
例)a、b、e、と並んでいて d を入力すると b と e の間に挿入される。

新たに関数を定義する場合は指定箇所以外に追記しても構わないそうです。
せめてヒントだけでも良いので宜しくお願いします。
517デフォルトの名無しさん:2005/11/18(金) 23:05:49
こいつ教えてもらう気あんのか?w
518名無し:2005/11/19(土) 14:21:28
せめて、入力された英字がアルファベット順に表示できるプログラムだけでもいいので教えてください。
519デフォルトの名無しさん:2005/11/19(土) 15:15:15
TStringList使ってSortすれば?
520デフォルトの名無しさん:2005/11/19(土) 15:32:50
>>514じゃないけど書いておきます。
よろしくお願いします。
program linkedlist(input, output);
type
timerecord = record
Name: packed array[1..20] of char;
guard: boolean;
next: ^timerecord;
end;
Pointertimerecord = ^timerecord;
Namearray = packed array[1..20] of char;
var
head,last : Pointertimerecord;
n,count : integer;
prev : Pointertimerecord;
DataNO : integer;
procedure printdata(Data: Pointertimerecord);
begin
while Data^.guard=false do
begin
writeln('====================');
writeln(' Name = ',Data^.name);
Data:=Data^.next;
end; { while }
writeln('====================');
end; { printdata }
521デフォルトの名無しさん:2005/11/19(土) 15:33:31
procedure addlist(var Prevdata,Newdata : pointertimerecord);
begin
new(Newdata);
Newdata^.next:=Prevdata^.next;
Prevdata^.next:=Newdata;
{ enter data of record }
write('Adding data -- Enter the name : ? ');
readln(Newdata^.name);
if Prevdata^.guard=false then
begin
Newdata^.guard:=false;
end else begin
Newdata^.guard:=true;
Prevdata^.guard:=false;
end; { if }
end; { addlist }
522デフォルトの名無しさん:2005/11/19(土) 15:34:16
begin
new(head);
last:=head;
{ enter data of record }
write('Enter number of record : ? ');
readln(count);
for n:=1 to count do
begin
{ enter data of record }
write('No.',n:2,'--Enter the name : ? ');
readln(last^.name);
last^.guard:=false;
{ make next datum }
new(last^.next);
last:=last^.next;
last^.guard:=true;
end; { for }
writeln;

{ print record }
last:=head;
printdata(last);
523デフォルトの名無しさん:2005/11/19(土) 15:34:51
{ addlist }
last:=head;
{----------------------------------------------------}
write('Enter the position number of a new datum to be inserted (>=2) : ? ');
readln(DataNO);
if DataNO > (count+1) then
begin
DataNO:=count+1;
end;
for n:=1 to (DataNO-2) do
begin
last:=last^.next;
end; { for i }
prev:=last;
addlist(prev,last);
if DataNO<2 then
begin
head^.next:=last^.next;
last^.next:=head;
head:=last;
end; { if }
{----------------------------------------------------}
{ print record }
last:=head;
printdata(last);
writeln('End of Job.');
end.

以上です。よろしくお願いします。
524名無し:2005/11/19(土) 15:58:45
上のソースの{--------------------------}で囲った部分です。
この部分は、既にある文字に一つ何かを追加する時、入れたい場所を番号で指定するようになっています。
ここを入力した文字がアルファベット順に並ぶようにするプログラムになるようにしなければならなければなりません。
520さんどうもです。
525デフォルトの名無しさん:2005/11/19(土) 16:01:28
どちらが先に来る名前か判定する関数と、
順番に見て行って順番が後の名前を見つけたら、その前に挿入
526名無し:2005/11/19(土) 16:41:04
それがわかったら苦労しないです。。。汗 
具体的に教えてください…汗
527デフォルトの名無しさん:2005/11/19(土) 17:09:46
あとはコードにするだけでしょ。
具体的にどこができてないの?
528名無し:2005/11/19(土) 17:18:54
点線で囲んだ部分です。プログラム自体が得意ではないんで…
実際にソースで書いてもらえないと理解できないです。
529デフォルトの名無しさん:2005/11/19(土) 19:42:13
プログラミングが不得意なら何でプログラミングの講義なんて取って、しかも先生の言うことスルーするんだ
530デフォルトの名無しさん:2005/11/19(土) 22:13:05
宿題スレなのに丸投げを許さないおまいらに惚れたw
531.:2005/11/19(土) 22:58:07
...
532デフォルトの名無しさん:2005/11/19(土) 23:04:22
答え丸投げしようが本人が自分でできるようにアドバイスしようが教える側の勝手
533.:2005/11/20(日) 10:12:01
怖い・・・もうついていけない・・・
534デフォルトの名無しさん:2005/11/20(日) 10:33:09
情けないな。
ネコミミがついてないからだ。ネコミミをつけろ。
535デフォルトの名無しさん:2005/11/20(日) 10:53:55
ネコしっぽだけじゃだめッスか?
536デフォルトの名無しさん:2005/11/20(日) 11:31:15
>>525
1個目と2個目を比較して位置を入れ替えることはできるけど
2個目と3個目
3個目と4個目という風にしていくと繰り返しでは出来なくなるような
537デフォルトの名無しさん:2005/11/20(日) 12:05:50
for i := 1 to 3 do
i個目とi+1個目を比較
でいいんじゃない?
538名無し:2005/11/20(日) 12:50:56
もうやめたい・・・
539デフォルトの名無しさん:2005/11/20(日) 12:56:42
配列中の英単語の種類をまとめて表示しろってあるんだけど
自分がやると
book 3
pen 1
bike 3
apple 2
apple 2
book 2
bike 3
bike 3
みたいになります。単語ごとにまとめるアイディアください
540デフォルトの名無しさん:2005/11/20(日) 13:42:31
ごめんまったくいみがわからない
541デフォルトの名無しさん:2005/11/20(日) 15:43:19
Cの宿題スレとくらべてなんでこんなに不親切なんだ?
よほど利用者が少ないのか、回答できない低レベルなユーザーばっかなのか。
回答するならきちんと教えてあげなよ。
542デフォルトの名無しさん:2005/11/20(日) 16:39:54
>>537
last:last^.next
last:=headという風にしてるから
繰り返しをするとデータのつながりが切れたりするかと
4→3→2→1を1→2→3→4に並び替える時に
last:=last^.next;
last^.next:=head;
で3→4にして
head^.next:=last^.next;
で4→2
にしたとして今headが4→2→1 lastが3→4→2→1
head:=lastで同じにして
3→4→2→1
繰り返しだから
last:=last^.next; lastが4→2→1 head3→4→2→1
last^.next:=head;
とするとここで4→3→4に戻る・・・とここで変になるし
もうひとつprevというのを使っても途中でデータ消えたりするな・・
繰り返す方法が他にあるのかそれともこの計算方法が間違ってるのか・・・
あと1文字目だけを見るときは簡単だが1文字目と2文字目が同じで3文字目が違う場合に
アルファベット順にする場合はもっと複雑になる気が・・・
543デフォルトの名無しさん:2005/11/20(日) 17:10:39
4→3→4に戻るって意味が分からんが。
この問題だと最初につくるリストはアルファベット順だから
そもそもソートは必要ないんだけどね。

>1文字目だけを見るときは簡単だが・・・
比較をする関数で1文字目から違う文字がでてくるまでループするだけ
544デフォルトの名無しさん:2005/11/20(日) 18:08:03
book 3
pen 1
bike 3
apple 2
apple 2
book 2
bike 3
bike 3

book 2
pen 1
bike 3
apple 2
(単語の後の数字は配列中の単語の個数)
のようにまとめて表示したいのですが、分かりづらくてすいません
545デフォルトの名無しさん:2005/11/20(日) 18:27:46
>>544
とりあえず元の問題を表示するのとなにを使えと言われてるのかが判らないと
教えるに教えれんぞ
>>543
リストが元からアルファベット順とか書いてないのだが
あと{----}の線の間なら全て消して書き直してもいいのだろうか?
addlistという関数を使うとややこしくなる
546デフォルトの名無しさん:2005/11/20(日) 18:40:58
>>516によると
>ただし、予め入力されている名前のリストは、既にアルファベット順に並んでいて良いものとします。
だそうだ。
547545:2005/11/20(日) 20:07:53
>>546
うはw
520からしか見てなかったorz
548デフォルトの名無しさん:2005/11/20(日) 22:58:39
>>541
そういう自分が教えてあげない時点で駄目だろw
549デフォルトの名無しさん:2005/11/20(日) 23:40:39
>514
function compare(p,q:pointertimerecord):boolean;var i:integer;
function c:integer;begin c := Ord(p^.name[i])-Ord(q^.name[i]);end;
begin i:=1;while(i<=20)and(c=0)do i:=i+1;compare:=c>0;end;

addlist(head,last);if compare(head, head^.next) then begin
prev:=head^.next;head^.next:=prev^.next;prev^.next:=head;head:=prev;
end else prev:=head;last:=prev^.next;while(not last^.next^.guard)and
compare(last,last^.next) do begin prev^.next:=last^.next;prev:=prev^.next;
last^.next:=prev^.next;prev^.next:=last;end;
550名無し:2005/11/21(月) 00:24:06
これを点線のとこに入れればよいのでしょうか?>549
でも今までとは違ってこれを見ても理解できない自分が情けない・・・
551デフォルトの名無しさん:2005/11/21(月) 09:53:47
>>550
お前いい加減にしろよ?
なんで自分で試そうとしないんだよ
552名無し:2005/11/21(月) 10:16:09
ソースがあっても、理解もできていないのに、試してもしかたない。
ありがとう指摘してくれて。
553デフォルトの名無しさん:2005/11/21(月) 13:16:18
こいつに教えても仕方が無いよ
向上心のかけらも無い
554デフォルトの名無しさん:2005/11/21(月) 15:44:59
同じ大学に通う学生として>>552の発言は本当にどうかと思う
>>553の言うとおり向上心の欠片も持ち合わせてない。
555デフォルトの名無しさん:2005/11/21(月) 15:54:07
その台詞だけ見れば真っ当な事を言ってるから味方しようと思ったのに
なんだよおまえw
556デフォルトの名無しさん:2005/11/21(月) 19:23:59
>>549
2つほど質問をさせてください。
二つ目のfunctionはどのような意味があるのでしょうか?

begin〜end;が二つあるのはどういうことでしょうか?

二つとも講義中には出てこなかった表現なので、全く分かりません。
5時間ほど自分で調べていたのですが、答えが見つかりませんでした。
どうか宜しくお願いします。
557デフォルトの名無しさん:2005/11/21(月) 21:29:49
>>556
関数内関数。

function Hoge;
 function Hige;
 begin
 end;

begin
end;

Hige は Hoge 内でのみ使える関数。
558556:2005/11/22(火) 08:49:21
>>557
返事が遅くなって申し訳ありません。ありがとうございました。これで全ての謎が解けました。
559デフォルトの名無しさん:2005/11/22(火) 15:31:23
>549
関数内関数をを使わずにっていうのはできないんですか?
560デフォルトの名無しさん:2005/11/22(火) 18:44:51
>>559
cを変えてやればできるよ
561デフォルトの名無しさん:2005/11/23(水) 03:36:43
cを変えるってどういうことですか?

562デフォルトの名無しさん:2005/11/23(水) 04:46:48
関数の名前だろうが
563デフォルトの名無しさん:2005/11/23(水) 18:14:12
俺も>>514と同じ大学に通う学生なんだけど
ほんとマジ助かった
提出まで後少ししか時間ないからあせってたところ

つか、こんなところに仲間がいたなんてwww
564デフォルトの名無しさん:2005/11/23(水) 21:24:48
>>562
場ぁわきまえて、もの考えてから発言せーや!!
気分悪いねん
565デフォルトの名無しさん:2005/11/23(水) 22:10:15
バカは黙れw
566デフォルトの名無しさん:2005/11/24(木) 09:51:53
皆おんなじ解答を出してカンニングばれて単位もらえないのがオチw
5672ch:2005/11/24(木) 17:51:32
あの先生は、ぬかりがないよ・・・
568デフォルトの名無しさん:2005/11/24(木) 19:52:51
そこまでバカじゃないだろw
変数名や関数名変えて関数内関数もばらしたりしてれば
大丈夫なんじゃない?
569デフォルトの名無しさん:2005/11/24(木) 20:33:53
>>549
名前何を入力しても2番目に挿入されるんだけどw
570569:2005/11/24(木) 21:01:52
俺のミスだったorz
571デフォルトの名無しさん:2005/11/25(金) 00:44:38
>>520-523+>>549のプログラムで
アルファベットの大文字と小文字を区別しないように
したいのですがヒントor丸投げお願いします
572デフォルトの名無しさん:2005/11/25(金) 11:41:15
大文字から小文字への変換をかます。
573デフォルトの名無しさん:2005/11/26(土) 16:41:49
1ヶ月ごとに学生アルバイトにバイト代を払うための、 学生アルバイトの労務管理システムを作りたい。すべての
アルバイトデータが、日付、学生氏名、その日の職種、 その日の労働時間 の4項目を持つものとする。
(注 : 学生の数は50名以下であるとしてよい!)

(1) まずはこれらのデータを格納する型をレコード 型により定義せよ。ただし、職種はr (レジ係)、p (配送係)、
i (接客係)、 c (清掃係)、 のいずれかとする。
(2) 次に(1)で定義した型に、準入力 (Keyboardのこと)から値を読み込み、メモリー内の配列(あるいはポイ
ンターを利用したlinked list)内に 収納するとともに、標準出力(画面のこと)へ書き出す操作を任意の回
数だけ繰り返すところまでプログラム を作成せよ。ただし、仕事のイメージとしては、月末に、伝票に書い
    てあった「日付、学生氏名、その日の 職種、その日の労働時間」を日付順に打ち込んでいく作業である。つ
    まりイベント順の入力方式である。し たがって、日付が異なれば同じ学生氏名であっても異なる入力が存
    在する。また1日の間では、ある一人 の学生の職種は変化しないが、日付が異なれば、職種は変化する場
    合があるものとする。
    なお、ここで入力するデータ は、伝票の中身をそのまま残すのが目的なので、同じ学生のデータでまと
    めたり、ソートしたりはしないこと。 (注 : 伝票の数はあらかじめわかっているとしてよい)
(3) (2)で作った基本データに追加で任意の数のア ルバイトデータ(追加の伝票のデータ)を追加できるように
    プログラムを改造せよ。(ここの追加 部分でも、日付などでソートする必要はない。また追加伝票の数はあ
    らかじめわかっているとしてよい)
574デフォルトの名無しさん:2005/11/26(土) 16:42:50
(4) (3)までで作った基本データを、外部ファイ ル’save05**.dat’に出力するようにプログラムを改造せよ。
     ただし、外部ファイルはテキストファ イルでもバッファファイルでもよい。 ただしこのファイルの読み込み機
     構も備えること。つまりこの段階で は、基本データのファイルへの書き出し、ファイルからの読み出しが出
     来ることが必要である。ただしファイ ル名の**には月名が入る(1月→01、 12月→12)。月名は標準入力
     から手で入れるものとする。
(5) (4)で読み出した基本データをもとに、それぞ れの職種のその月の時給を入力すると、各学生が受け取る
     べきアルバイト代を、標準出力(画 面)に表示するとともに、外部テキストファイル’pay005**.txt’に出力
     するようにプログラムを改造せよ。た だし、同じ学生の基本データはすべて集約するものとし、学生のアル 
     ファベット順に(大文字小文字は区別 しない)出力のこと。
                  
  
575デフォルトの名無しさん:2005/11/26(土) 16:43:55
(例) 基本データ (テキストデー タとした場合の例)
      10-05     Shinomori r 3
10-22 Shinomori p 1
10-22 Mendori c 4
10-20 Shinomori r 1 added

支払いデータ(pay00510.txt)
Octobar parttime job payment.
r 620 per hour
p 750 per hour
i 900 per hour
c 820 per hour
---------------------------------------------
Mendori c 820 * 4 = 3280

total = 3280
---------------------------------------------
Shinomori r 620 * 4 = 2480
p 750 * 1 = 750

total = 3230
---------------------------------------------
End of payment data.
(6) 上の機能(2〜5)をメニューで選んで自由な 順で、使えるようにプログラムを改造せよ。
576デフォルトの名無しさん:2005/11/26(土) 16:47:25
>>573-575に書き込んだ課題が最初からまったくわかりません。
締め切りも近いし本当にあせっています。
どうか助けてください。
577デフォルトの名無しさん:2005/11/26(土) 18:46:01
(1):recordsample.pを参考に書き換えよう
(2):これも同じくrecordsample.pの書き換え
(3):for 2で入力した人数+1 to 追加する人数+2で入力した数 do
   あとは(2)と同様
(4):textwrite.pとtextread.pを良く見ながらやってみよう
(5):俺も分からん。ここだけ誰か教えてください
578デフォルトの名無しさん:2005/11/26(土) 20:26:36
>>577さん、書き込みありがとうごさいます。
これで一歩前に進めそうです。
579デフォルトの名無しさん:2005/11/26(土) 20:32:39
宿題で
ぎこBASIC2005のソースをいじくっているのです。
誰がやらせろと言っているのですか?
もしよろしければ
ギコBASIC2005のソースに細かく注釈をつけて欲しいのです。
お願いつかまつりそうろうでございまする。

できあがったその暁にはカスタマイズされた
ギコBASIC2006(2006年完成予定)をオープンソースで提供しましょう。
580デフォルトの名無しさん:2005/11/26(土) 20:34:12
ここはPascalなんだからギコPascalにしてくれ。
581デフォルトの名無しさん:2005/11/26(土) 20:39:44
ギコBASIC2006がリリースされた暁には
誰でも自分言語をもてる時代が来ます。
ギコPASCALに改造することもたやすいでしょう。
ただ、現在のソースを解析するには困難なのです。

PASCALスクリプトでも良いというならばわかりましたといいます。
しかしネイティブコードを吐くには時間がかかりすぎます。
DELPHIソース生成ならば考えがなくもなくもなくもないのです。
582デフォルトの名無しさん:2005/11/26(土) 20:49:13
というか宿題かそれ
583デフォルトの名無しさん:2005/11/26(土) 20:55:50
宿題です。
学校の宿題ではないですが、
宿題だからきっと願いはかなうと思ってました。

宿題の肝心の部分は自分で何とかしようと努力しています。
しかし過去に何人もの2chねるパネラーの方々が
ギコBASICのソースの前にひれ伏しているのです。

これが改良された暁には
2chねるパネラーの方々の標準言語として
親しまれていくことでしょう。
584デフォルトの名無しさん:2005/11/26(土) 20:58:16
Pascalの宿題出す学校の方がもはや希少価値
585デフォルトの名無しさん:2005/11/26(土) 20:59:35
ギコ PASCAL を先に作った方が良いと思われ。
586デフォルトの名無しさん:2005/11/26(土) 21:01:23
ギコBASIC、しい言語、ときたらギコはPASCALではいけない気がします。
587デフォルトの名無しさん:2005/11/26(土) 21:04:13
type list = record
name:packed arra[1..20] of char;
next:^list;
judge:boolean;
end;
datalist =^list;
var
data:array[1..10] of datalist;

という形式のファイルの保存と読み込みがしたいのですが
nextがやっかいでなかなかできません助けてください。。
588デフォルトの名無しさん:2005/11/26(土) 22:34:54
>>573-575の課題丸投げでお願いします。助けて下さい。
589>>579:2005/11/26(土) 22:40:10
こちらの方の方が困ってらっしゃるように見える。

>>587さん優先でお願いします。

というよりもです
自力で明日一日かけて取り組むことに決めました。
590デフォルトの名無しさん:2005/11/26(土) 23:13:13
>>587
連結リストでしょ。
単に定義の仕方が違うだけでは。

type
 datalist =^list; //先にポインタ型を定義する

 list = record
  name: packed array[1..20] of char;
  next: datalist; //定義済みのポインタ型を使う
  judge: boolean;
 end;

var
 data:array[1..10] of datalist;
591デフォルトの名無しさん:2005/11/27(日) 10:20:18
>>573-575で(1)と(2)はできたんですがその後がわかりません。誰か教えてくれませんか?
592デフォルトの名無しさん:2005/11/27(日) 11:11:24
お断りする。
593デフォルトの名無しさん:2005/11/27(日) 11:17:03
>>592どうしてですか?
594587:2005/11/27(日) 14:03:49
>>590
ありがとうございます
早速試してみます
595デフォルトの名無しさん:2005/11/27(日) 16:51:10
誰か>>573-575をお願いします!
596デフォルトの名無しさん:2005/11/27(日) 17:32:03
>>595
最終課題は一人でやらないとカンニング扱いで全単位もらえなくなるから
やめといたほうが・・・w
ヒントぐらいにしとけ・・・
597デフォルトの名無しさん:2005/11/27(日) 20:05:39
いや、丸写しする人はいないでしょw
598デフォルトの名無しさん:2005/11/27(日) 22:20:28
>>595
しつこいよ君
やりたい人が来たらやるだろうから待ってろ
599デフォルトの名無しさん:2005/11/27(日) 22:42:04
いろいろ試してみましたが、さっぱりわかりません。
どなたか>>573-575を早急にお願いします!
600デフォルトの名無しさん:2005/11/27(日) 22:45:55
>>599
こんなものは余裕だ。ひまわりならばだが。

そしてひまわりのソースは公開されている。

さあ!あなたのすべきことは一つ。と言ってみるテスト
601デフォルトの名無しさん:2005/11/27(日) 22:50:19
>>600
ごめんなさい、何をすればいいのか全然分かりません。
何でもするので教えてください!
どうかお願いします!
602デフォルトの名無しさん:2005/11/27(日) 22:54:18
ひまわりはDELPHI言語でできている。ということは
簡単なひまわりでまず達成する。
そしてひまわりのソースはほぼパスカルなわけだから、

ひまわりのソースから部分的に抜き出すことで宿題は完結します。
と思いませんか?
603デフォルトの名無しさん:2005/11/27(日) 22:55:48
で最後に宿題の条件にあうように加工すればOK
604デフォルトの名無しさん:2005/11/27(日) 22:58:01
ひまわりって何ですか?
605デフォルトの名無しさん:2005/11/27(日) 23:09:02
>>602
ソースファイルはどこにありますか?
606デフォルトの名無しさん:2005/11/27(日) 23:23:37
ひまわりのダウンロードサイトにあります。
やふると簡単にでます。
「プログラム ひまわり」でどうぞ。
というか…。
607デフォルトの名無しさん:2005/11/27(日) 23:38:19
というか…なんですか?
608デフォルトの名無しさん:2005/11/27(日) 23:39:13
できましたか?
609デフォルトの名無しさん:2005/11/27(日) 23:39:24
ひまわりのソースを落としました。
LZHになっていて開いてみたのですが、たくさん入っていてどれだか分かりません。
ソースのどの辺りを抜き出せばいいのか教えてください。
もう時間がないので、どうかお願いします。
610デフォルトの名無しさん:2005/11/27(日) 23:43:49
目的の物をひまわりで組んでみるのですよ。まず
611デフォルトの名無しさん:2005/11/27(日) 23:58:59
そんな!自分でプログラムできるくらいなら質問したりしません!
私にできることなら何でもするので、どうか教えてください。
明日までに提出できないと単位がもらえないかもしれないです。
もし留年したら親にも迷惑がかかるし、それだけはどうしても困ります!
どうかよろしくお願いします。
612sage:2005/11/28(月) 00:11:46
提出期限 12月2日 19時30

正直キミの単位がどうなろうとこっちには関係ない。
それに教えてもらってそれをそのまま提出したところで
単位はないだろうしさ。
困るなら少しは自分で考えようよ
613デフォルトの名無しさん:2005/11/28(月) 00:23:13
>>612
>>597

5番目のヒント欲しいです
614デフォルトの名無しさん:2005/11/28(月) 01:41:25
>>613
今までに十分すぎるほどでてるヒントで解けないなら
単位諦めればいいんじゃね?
615デフォルトの名無しさん:2005/11/28(月) 02:25:12
出てないと思いますが・・・
616デフォルトの名無しさん:2005/11/28(月) 02:29:12
いや、出とるがな
617デフォルトの名無しさん:2005/11/28(月) 03:42:34
>そんな!自分でプログラムできるくらいなら質問したりしません!
>私にできることなら何でもするので、どうか教えてください。
>明日までに提出できないと単位がもらえないかもしれないです。
>もし留年したら親にも迷惑がかかるし、それだけはどうしても困ります!
>どうかよろしくお願いします。

お前の勉強不足が原因だろ
618デフォルトの名無しさん:2005/11/28(月) 04:25:03
分からない人は目の前に餌が転がってても見えない好例ですね
619デフォルトの名無しさん:2005/11/28(月) 07:56:03
>>613
(5)はスクリーンに表示するようにtxtに表示したらいいだけだぞ
620デフォルトの名無しさん:2005/11/28(月) 08:38:27
釣られる方もどうかしてる罠。
621名無し:2005/11/28(月) 10:11:35
ソースの提供を・・汗
2番まではできましたが、そこから先が・・・汗
622デフォルトの名無しさん:2005/11/28(月) 10:39:33
その2番まで出来たソースを晒せ。話はそれからだ。
623名無し:2005/11/28(月) 11:35:53
誰か2番までのソースを提供きぼんぬ
624名無し:2005/11/28(月) 11:44:31
ファイル文を使って、datファイルに、データが書き込まれたものがあるのですが、
それに、更にデータを追加するにはどのようなプログラムを書けばよいのでしょうか?
625デフォルトの名無しさん:2005/11/28(月) 16:16:50
program bout(input,output,J1JIIl);typellIlIJ=record
lIlJJI:string(20);I11JI1:^llIlIJ;l1l1l1 : boolean;end;
varJ1JIIl:text;ll1ll1:string(20);IlIlIJ,IJIlJJ:integer;
IIlJ11: ^llIlIJ;beginnew(IIlJ11);ll1ll1:='NullPointer';
writeln('Nmber');readln(IJIlJJ);rewrite(J1JIIl,ll1ll1+'.txt');
for IlIlIJ:=1 to IJIlJJ do beginIIlJ11^.l1l1l1:=false;
writeln('Name');readln(IIlJ11^.lIlJJI);writeln(J1JIIl,ll1ll1);
new(IIlJ11^.I11JI1);IIlJ11:=IIlJ11^.I11JI1;IIlJ11^.l1l1l1:=true;
end;end.
626デフォルトの名無しさん:2005/11/28(月) 16:20:42
>>623ちょっとだけど書いたよゥ
627名無し:2005/11/28(月) 16:35:37
>>624の詳細知りたいです。
628デフォルトの名無しさん:2005/11/28(月) 17:51:59
write('どんだけ追加すんだよ');
readln(a);
for m:=n+1 to n+a do
begin
readln(data.a);
readln(data.b);
nantoka[m] := data;
end;

つーかこれも>>573-575と絡んでるだろ
629名無し:2005/11/28(月) 18:40:11
上の文章を使って、すでにあるデータに、名前や仕事時間などを入力できるのですか??
630デフォルトの名無しさん:2005/11/28(月) 18:56:04
名無しおもしろすぎ
631デフォルトの名無しさん:2005/11/28(月) 18:57:05
>>629
お前>>552と同一人物か。
試してからモノを言え。
試せないんなら単位落としてダブれ
632デフォルトの名無しさん:2005/11/28(月) 18:57:15
ガス漏れに注意しよう、な?
633デフォルトの名無しさん:2005/11/28(月) 20:12:48
テキストファイルを読み込んでレコードファイルを出力する課題が出ているのに、定義を含めて扱い方がさっぱりわからない。
誰か助けてください。
634デフォルトの名無しさん:2005/11/28(月) 20:23:26
635デフォルトの名無しさん:2005/11/28(月) 20:31:12
しかしいつかは御自分でやらなければならないのですよ。
しかもひまわりすらできないというのか。
636デフォルトの名無しさん:2005/11/28(月) 20:40:03
土日月と三日もあったのに何もせずにいるのが信じられん。
三日あればヘローワールドくらいはできただろうに。
課題が出たのはさらに前なんだろうな、きっと。
637デフォルトの名無しさん:2005/11/28(月) 21:01:49
このスレは宿題をやるスレであって課題をするスレじゃないぞ

か‐だい〔クワ‐〕【課題】
1 与える、または、与えられる題目や主題。
2 解決しなければならない問題。果たすべき仕事。

しゅく‐だい【宿題】
1 家庭でやってくるべきものとして教師が児童・生徒に課する、学習上の課題。
2 解決が後日に持ち越された課題。
638デフォルトの名無しさん:2005/11/28(月) 21:06:06
はいはいそうですねそうですね
639デフォルトの名無しさん:2005/11/28(月) 21:11:02
レコードは,ほかの言語では構造体とも呼ばれ,複数の型を持つ要素の集合を表します。
すべてのアルバイトデータが、日付、学生氏名、その日の職種、 その日の労働時間 の4項目を持つものとする。

アルバイトデータは日付、学生氏名、その日の職種、 その日の労働時間をもつ構造体である
ってこういうことですか?
type
アルバイトデータ = record
日付: strings;
学生氏名: strings;
その日の職種: (r, p, i, c);
その日の労働時間: integer;
end;
640デフォルトの名無しさん:2005/11/28(月) 21:18:20
ここで質問です。コンソールでやりなさいということでしょうか?
641名無し:2005/11/28(月) 23:41:37
ソースを・・・きぼんぬ
642デフォルトの名無しさん:2005/11/29(火) 00:02:02
ttp://www.otafuku.co.jp/

ソースソースうるせーよバカ
643デフォルトの名無しさん:2005/11/29(火) 00:26:37
グーグルで調べても分からなかったのですが、指定したディレクトリの有無を
調べるような関数(または方法)はありますか?
644デフォルトの名無しさん:2005/11/29(火) 02:43:31
定義
type
 elementtype = real;
 pointertype = ^celltype;
 celltype = record
  element : elementtype;
  next : pointertype
 end;
var
 header,q : pointertype;
 y : real;

絶対値に関して昇順に並ぶように線形リストにデータを挿入する

q := header;
while ( ( q^.next <> nil ) and ( abs( y ) >= abs( q^.next^.element ) ) ) do q := q^.next;
insert( y, q );

エラーが出るのですが原因が分かりません。
お願いします。
645デフォルトの名無しさん:2005/11/29(火) 03:08:18
insert 関数の中身を書け
646デフォルトの名無しさん:2005/11/29(火) 03:19:18
>>643
WindowsならWinApiを使えば
647644:2005/11/29(火) 03:23:30
procedure insert(x:elementtype; var p:pointertype);
var tmp : pointertype;
begin
 tmp:=p;
 new(p);
 p^.element:=x;
 p^.next:=tmp
end;

こんな感じです
648デフォルトの名無しさん:2005/11/29(火) 03:36:28
header が nil じゃん。
649デフォルトの名無しさん:2005/11/29(火) 03:45:00
>( ( q^.next <> nil ) and ( abs( y ) >= abs( q^.next^.element ) ) )
ここ駄目じゃね?
650名無し:2005/11/29(火) 14:46:21
もうダメぽかも分からんね
651名無し:2005/11/29(火) 16:02:37
じゃあしねぽ
652デフォルトの名無しさん:2005/11/29(火) 18:49:25
おまえらあきらめたのかよ。
653デフォルトの名無しさん:2005/11/29(火) 21:18:33
>>651
が実は
>>644
だったらどうする?
654デフォルトの名無しさん:2005/11/29(火) 22:03:52
プログラムもいいが作業報告書もがんばろう、な!
655デフォルトの名無しさん:2005/11/29(火) 22:36:21
がんばるよ!
656デフォルトの名無しさん:2005/11/30(水) 00:35:40
出来たよ!
657デフォルトの名無しさん:2005/11/30(水) 03:16:23
作業報告書もできたよ!このスレの皆さん本当にありがとう!!
658デフォルトの名無しさん:2005/11/30(水) 10:12:05
できたやつなんてそういないから、だいたい誰かしぼれるけどな。
659デフォルトの名無しさん:2005/11/30(水) 14:17:54
だめだ、ぜんぜんできない。
660デフォルトの名無しさん:2005/11/30(水) 14:49:27
>>658
>>655-657・・・
1:別の大学に通う学生
2:>>654に合わせただけ
3:実は嘘
661デフォルトの名無しさん:2005/11/30(水) 14:49:56
>>658
>>655-657は・・・
1:別の大学に通う学生
2:>>654に合わせただけ
3:実は嘘
662名無しダナピウさん:2005/12/01(木) 17:50:02
遂に今日は課題期限の前日
さあ伸るか反るか。運命の時〜♪
663デフォルトの名無しさん:2005/12/01(木) 18:23:30
大半は死亡決定!?
664デフォルトの名無しさん:2005/12/01(木) 18:27:10
>>662
半ばやけくそだな
665デフォルトの名無しさん:2005/12/01(木) 20:53:28
今夜は眠れない夜になりそうだな
666デフォルトの名無しさん:2005/12/01(木) 21:11:36
眠れない夜は眠れない夢を
667デフォルトの名無しさん:2005/12/01(木) 21:17:03
留年したほうが本人の為になる。
こう考えてくれ。
「常人より1年多く学べる」
668デフォルトの名無しさん:2005/12/01(木) 21:25:40
>>667
余分に金かかる事を忘れずに
669デフォルトの名無しさん:2005/12/01(木) 21:32:16
>>668
本人の為を思うならかけたほうが良い。
670デフォルトの名無しさん:2005/12/01(木) 21:48:19
>>669
かけたくてもかけれないやつもいるんだぞ
671デフォルトの名無しさん:2005/12/01(木) 21:54:51
>>669
国立ならそういう考えも起きるけどね
672デフォルトの名無しさん:2005/12/01(木) 22:13:54
かけれなかったら頑張るしかないなw
673デフォルトの名無しさん:2005/12/01(木) 23:16:19
たかだかこの程度の課題も出来ずに留年…
情報系の大学生のレベルってこんな程度なのか
まぁ就活で現実を直視させられるだろうな
674デフォルトの名無しさん:2005/12/01(木) 23:20:24
同じ大学生でもBASICコンパイラ作っちまう奴もいる。
宿題は御自分でやりなさいってことよのう。
675デフォルトの名無しさん:2005/12/01(木) 23:22:31
授業のことを何も知らない>>673は黙ってろ
676デフォルトの名無しさん:2005/12/01(木) 23:23:53
>>673
ヒント:先生の教え方
677デフォルトの名無しさん:2005/12/01(木) 23:24:36
そんなの知ってるわけねーじゃんww
678デフォルトの名無しさん:2005/12/01(木) 23:25:16
>>676
勉強は自分でするものだよ…(´・ω・`)
679デフォルトの名無しさん:2005/12/01(木) 23:26:11
>>676
ヒント:勉強に対する意欲と予習・復習
680デフォルトの名無しさん:2005/12/01(木) 23:27:21
まだ始めて2ヶ月も経ってない俺達にどうしろと
まあその中でできてる奴らもいるんだけどね…
681デフォルトの名無しさん:2005/12/01(木) 23:31:36
苦手意識を捨てなさい。
682デフォルトの名無しさん:2005/12/01(木) 23:37:55
苦手意識はない
むしろ得意だった
しかし、急速に授業が進んでいって大したレクチャーも受けず
習うより慣れろってな感じでプログラム真似させられてわけもわからないまま
今に至る
683デフォルトの名無しさん:2005/12/01(木) 23:39:23
家で勉強すると吉と出ました。
684デフォルトの名無しさん:2005/12/01(木) 23:40:23
>>682
確かに。一度躓いたら一気に置いてけぼりにされるいい例だね
685デフォルトの名無しさん:2005/12/01(木) 23:42:27
1 名前:デフォルトの名無しさん 04/07/13 20:55
教育用(?)プログラムPascalの宿題をやって頂くスレ

■全く分かってない阿呆も放置しないで優しく対応
686デフォルトの名無しさん:2005/12/01(木) 23:57:25
>>678,679
復習はしてた。でもあの教えk(ry

>>683
正直コンパイラがどこにあるかとか誰も知らないと思うよ。
比較的見つかりやすいfpcじゃ大学で使ってるgpcとかなり違うし。
gpcは余計にどこにあるか分からないね。
687名無しダナピウさん:2005/12/02(金) 00:01:24
さあ提出期限の日ですよ!
皆さん!準備はいいですかー!?
688デフォルトの名無しさん:2005/12/02(金) 00:03:00
いいわけねーよwwwwwwバーローwwwwww
689デフォルトの名無しさん:2005/12/02(金) 00:15:37
>>687
バッチコーイ!!!1
690デフォルトの名無しさん:2005/12/02(金) 00:37:08
エラー箇所をC-kで削除してたら大事な部分まで消してしまった。
俺は泣いた、友達は吹いた。
691デフォルトの名無しさん:2005/12/02(金) 00:41:44
>>690
C-_でUndoできるっしょ
692デフォルトの名無しさん:2005/12/02(金) 00:54:24
>>691
そうだったんだ…。知りませんでした。どうもありがとう。
なんとか思い出して修正は完了してます。
693デフォルトの名無しさん:2005/12/02(金) 01:14:54
今この寮で必死こいてプログラム書いてる奴何人いんだろ
694デフォルトの名無しさん:2005/12/02(金) 03:05:33
たぶんそんなにいないんじゃね?
ここにもあきらめてるやついるし…
695デフォルトの名無しさん:2005/12/02(金) 03:06:42
どっか別のBBSで協力し合ってればよくね?
696デフォルトの名無しさん:2005/12/02(金) 08:33:26
ム、ムリだ
697デフォルトの名無しさん:2005/12/02(金) 11:48:20
初心者です。
デルフィで宿題してるんですが、中かっこ{}を数字で割ることはできないんでしょうか?
こういう感じで→{}/2;中かっこの中には()を含む掛け算が入ってます。何回してもエラーになります
698デフォルトの名無しさん:2005/12/02(金) 12:08:04
実数なら
a := ((b - 200) / 2) / 3;

整数なら
a := ((b - 200) div 2) div 3;

と、言う話?
699>>683:2005/12/02(金) 12:16:23
>>686
fpcはフリーパスカルということか?
gpcはGNUパスカルならば俺にはわかる。(DEV-PASCALでぐぐると楽かもしれん)
あとDELPHI6PERSONALは無料である。
700デフォルトの名無しさん:2005/12/02(金) 13:17:37
>>697
デルファイな
701デフォルトの名無しさん:2005/12/02(金) 18:36:36
697です。とりあえずできました。
〉698
ありがとうございました
鶴亀算を作ってるんですが実数と整数ってどういうときに使い分けたらいいんですか?
702デフォルトの名無しさん:2005/12/02(金) 19:38:09
小数が必要になった時に決まってるだろが
703デフォルトの名無しさん:2005/12/02(金) 19:45:43
あれぐらいの課題でなんでこんなにスレが伸びてるんだ
ただ
入力 出力 テキストに書き込み 保存 読み込み 
をそれぞれcase文で作るだけだろが・・・
704デフォルトの名無しさん:2005/12/02(金) 19:55:55
それすら出来ず、あげく自分の勉強不足を教師に責任転嫁する
ダメニンゲンズが何人か出没したからな
705デフォルトの名無しさん:2005/12/02(金) 20:03:27
このスレの趣旨を理解してない馬鹿多すぎ
>■全く分かってない阿呆も放置しないで優しく対応
って書いてるのが読めないのか?
特に「これぐらい誰でも出来る課題じゃん」とか言ってる奴。
そんなに簡単なら教えてやれ。教える気が無いなら下らん発言すんな
706デフォルトの名無しさん:2005/12/02(金) 20:21:46
アライグマパスカル。あげ。
707デフォルトの名無しさん:2005/12/02(金) 22:53:52
>>705
向上心が全く無く、ただ丸投げのみを期待している人間に優しく対応しただけだ
708デフォルトの名無しさん:2005/12/02(金) 23:28:51
>>705
全く分かってない阿呆に無視(放置)せずにやさしく自分で勉強するように進めた(対応)!w
709デフォルトの名無しさん:2005/12/02(金) 23:38:38
>>707,708
日本語すら理解出来んのか
もう一度小学校からやり直せ
710デフォルトの名無しさん:2005/12/03(土) 00:38:26
>>702
d!
711デフォルトの名無しさん:2005/12/03(土) 10:04:15
>>709
小学校じゃ他人の宿題を全部やってあげることがやさしいことって教えてるのかww
712デフォルトの名無しさん:2005/12/03(土) 10:21:04
真のやさしさというのは
本人の為に心を鬼にすることも必要なんだぜ
713デフォルトの名無しさん:2005/12/03(土) 11:34:26
向上心ゼロの池沼にも教える気満々な偉い705と709は
下らん発言してないでさっさと答え書いてやれよ
まさか出来ないなんていうことは無いよな?
留年の腹いせに逆ギレしてるなんてことは勿論ないよな?
714デフォルトの名無しさん:2005/12/03(土) 11:55:03
このスレは他人の宿題を奪い取り世の中のソフトウェア技術者を減らすためのスレですよ?
715デフォルトの名無しさん:2005/12/03(土) 12:59:29
まあこんなところで宿題丸投げする奴はどの道単位落とすけどな。
716デフォルトの名無しさん:2005/12/03(土) 14:04:56
>>714
ひじかた様(ITどかた)の数が減ると困るぞ。
717デフォルトの名無しさん:2005/12/03(土) 14:42:18
俺多分単位落とした(泣
心入れ替えて勉学に励みます…
718デフォルトの名無しさん:2005/12/03(土) 16:23:11
>>716
誰が?
719デフォルトの名無しさん:2005/12/03(土) 20:31:53
>>713
そいつらは質問者の自演だ
720デフォルトの名無しさん:2005/12/03(土) 20:33:20
>>718
土方を送り込んで利ざやを稼いでいるだけの派遣会社
721アズキリョウナ:2005/12/04(日) 18:47:11
学校の課題で困っている所があるので、お願いします。
本当にどんな課題でもやっていただけるのでしょうか?
722アズキリョウナ:2005/12/04(日) 18:50:23
課題内容は、以下のようになってます。↓
「1-5*4+9/2」などのように1桁の整数の加減乗除算(除算はPASCALのdivと同じ)から
なる式がキーボードから入力されるとき、その計算結果(整数値になる)を表示するプログラム
ただし、必ず、以下の2段階の処理でポインタと再帰を用いて実現すること:
1.入力された式をポインタを用いたデータ構造(木と呼ばれる)で表現する。
2.1で生成したデータ構造を用いて、考えに基づいて再帰的な処理で式の値を求める。
723アズキリョウナ:2005/12/04(日) 18:56:41
program evalExpr(input,output);
const
OP_ADD='+';
OP_SUB='-':
OP_MULT='*';
OP_DIV='/';
type
tree = ^treeCell;
treeCell = record
data : integer;
op : (OP_ADD,OP_SUB,OP_MULT,OP_DIV);
lefy,right : tree
end
724アズキリョウナ:2005/12/04(日) 18:57:24
var
t : tree; a : array of char
b : integer;
function calc(root: tree):integer;
var
x,y : integer;
begin
if root^.left=nil and root^.right=nil then calc:=root^.data
else
begin
x:=calc(root^.left);
y:=calc(root^.right);
if root^.op=OP_ADD then calc:=x+y
else if root^.op=OP_SUB then calc:=x-y
else if root^.op=OP_MULT then calc:=x*y
else calc:=x div y
end
end;
725アズキリョウナ:2005/12/04(日) 18:57:50
begin
{ツリーを作る}

b:=calc(t);
writeln(b);
end.
726アズキリョウナ:2005/12/04(日) 18:59:37
と、ここまでは一応出来たのですが、
{ツリーを作る}の部分のプログラム文がどうしても分かりません。
どうか、完全なプログラム文で教えてください。
お願いします。
727デフォルトの名無しさん:2005/12/04(日) 20:54:56
728デフォルトの名無しさん:2005/12/04(日) 20:58:16
条件がそれだけじゃなんとも・・・
その今出来てるやつを使わないといけないのか?
加減乗除算だが-+*/を全部使うと式の入力を終了させるようにするのか?
ツリーは2つに分かれてるのを前提でするのか?
どんなパスカルを使ってるのか(俺のじゃnil使えんw)
あと;が:になってたりするからそれをコンパイルをしてないことはわかるw
729アズキリョウナ:2005/12/04(日) 21:19:55
課題の目的が、ポインタと再帰処理の理解となっているので、
そのPascalのソースプログラムでポインタと再帰を使っていれば
提出出来ると思います。
730アズキリョウナ:2005/12/04(日) 21:49:30
OP_SUB='-': ←これの事ですよね。プログラム文見返していたら
確かに、ここだけ;じゃないですね。あ〜怖いなと思いました。
731デフォルトの名無しさん:2005/12/04(日) 21:50:24
すみませんが教えてください。
『3×3型の二つの行列A=[aij],B=[bij]を読み込み、積ABとBAを
求めるプログラムを作成せよ。また一般的にはABとBAが等しくならない
ことを確認せよ。』です
732デフォルトの名無しさん:2005/12/04(日) 22:01:01
>>730
a : array of char
733アズキリョウナ:2005/12/04(日) 22:07:59
>>728
これを読んで分かる人もいると思うけど、
僕は読んでもまだ分からないので、お願いします。
734アズキリョウナ:2005/12/04(日) 22:10:34
あっ、a:array of char ←ここにも;忘れてますね。
やっぱり付けるんですか?
735デフォルトの名無しさん:2005/12/04(日) 22:16:36
>>734
括弧(〜)の中を優先して計算する必要はあるの?
736アズキリョウナ:2005/12/04(日) 22:18:47
えっ?良く分からないのですが...。
737アズキリョウナ:2005/12/04(日) 22:20:43
っていうか、TAが言ってそうな文句ですね。
738デフォルトの名無しさん:2005/12/04(日) 22:27:06
>>736,737
それぞれ誰に対するレスだ?
739アズキリョウナ:2005/12/04(日) 22:27:37
>>735
有りますよ。そんなの
740アズキリョウナ:2005/12/04(日) 22:29:34
この人、そんなに答え返してくれてんの?
741デフォルトの名無しさん:2005/12/04(日) 22:30:16
>>740
どの人だよw
742アズキリョウナ:2005/12/04(日) 22:32:07
丸投げでもいいと言ったもん。
743デフォルトの名無しさん:2005/12/04(日) 22:37:42
会話をしようという気は無いのかw
744アズキリョウナ:2005/12/04(日) 22:44:27
プログラミング現場では、会話無いですよね。
745アズキリョウナ:2005/12/04(日) 22:49:34
どうなんのや?これっ。
746アズキリョウナ:2005/12/04(日) 22:51:08
やってみる!!
747アヅキリョウナ:2005/12/04(日) 22:52:48
もう何がなにやらwwwww
748アズキリョウナ:2005/12/04(日) 22:54:31
>>743
natt,
ないです。
749アズキリョウナ:2005/12/04(日) 22:54:56
自己解決しました!!
ありがとうございました。
750アズキリョウナ:2005/12/04(日) 22:58:01
会話??
751アズキリョウナ:2005/12/04(日) 22:59:25
2chっ、嫌い。
752デフォルトの名無しさん:2005/12/04(日) 23:00:04
自演かよw
753アズキリョウナ:2005/12/04(日) 23:00:11
ないです
754アズキリョウナ:2005/12/04(日) 23:00:41
>>752
なにこれ?
755アズキリョウナ:2005/12/04(日) 23:01:19
自演というと、困るコツ?
756アズキリョウナ:2005/12/04(日) 23:03:02
att,
戻れた。
757アズキリョウナ:2005/12/04(日) 23:04:56
>>749
まだ、事故解決してないよ。まだあ。
758デフォルトの名無しさん:2005/12/04(日) 23:06:10
これじゃ教えてあげるやついないだろww
759アズキリョウナ:2005/12/04(日) 23:06:17
何か、聞けてますか?
760アズキリョウナ:2005/12/04(日) 23:07:33
私、死んだの?
私、
761アズキリョウナ:2005/12/04(日) 23:08:51
人が分からないのです。ほんとに。
762アズキリョウナ:2005/12/04(日) 23:10:09
>>758
本当なんですか?
763アズキリョウナ:2005/12/04(日) 23:30:14
もうネタ切れか
764デフォルトの名無しさん:2005/12/04(日) 23:30:38
モノローグしてて楽しいか?
765アズキリョウナ:2005/12/04(日) 23:32:36
わからなくなりました。
766アズキリョウナ:2005/12/04(日) 23:33:15
こんな早く打てません。
767デフォルトの名無しさん:2005/12/04(日) 23:33:44
おまえ >>342 だろ。
誰にも宿題やってもらえなくて
後期終了間近になって焦ってるんだろ。
768デフォルトの名無しさん:2005/12/04(日) 23:34:51
おとなしくしてれば作ってやるから待ってろ
769アズキリョウナ:2005/12/04(日) 23:37:14
はっはい。
770アズキリョウナ:2005/12/04(日) 23:44:01
>>342
あっ、これや。
771アズキリョウナ:2005/12/05(月) 00:02:20
変な関西弁ですみません。甲陽出身です。
772アズキリョウナ:2005/12/05(月) 00:04:11
頑張ってね。
773アズキリョウナ:2005/12/05(月) 00:07:23
モノローグですか?
774アズキリョウナ:2005/12/05(月) 00:08:25
えっ逮捕!?
775アズキリョウナ:2005/12/05(月) 00:12:22
プログラム文ですyo。
776デフォルトの名無しさん:2005/12/05(月) 00:13:11
777デフォルトの名無しさん:2005/12/05(月) 00:13:57
 
778アズキリョウナ:2005/12/05(月) 00:16:36
馬鹿にしないでください。
キチガイだったらパソコンとかプログラミングなんて出来ませんよ。
779デフォルトの名無しさん:2005/12/05(月) 01:00:36
できてないおまえはそれだな
780デフォルトの名無しさん:2005/12/05(月) 02:26:30
もうここまでくるとちょっとしたネタになってきたな
781デフォルトの名無しさん:2005/12/05(月) 03:29:52
ネタ投下w

program evalExpr(input, output);

const
OP_NIL = chr(0);
OP_SPC = ' ';
OP_TAB = chr(9);
OP_ADD = '+';
OP_SUB = '-';
OP_MULT = '*';
OP_DIV = '/';

type
tree = ^treeCell;
treeCell = record
op : char;
data : integer;
left, right : tree;
end;

function calc(root : tree) : integer;

var
lhs, rhs : integer;

782デフォルトの名無しさん:2005/12/05(月) 03:30:17
begin
if (root^.left = nil) and (root^.right = nil) then
calc := root^.data
else
begin
lhs := calc(root^.left);
rhs := calc(root^.right);
if root^.op = OP_ADD then
calc := lhs + rhs
else if root^.op = OP_SUB then
calc := lhs - rhs
else if root^.op = OP_MULT then
calc := lhs * rhs
else if root^.op = OP_DIV then
calc := lhs div rhs
else
begin
writeln('Unexpected function. [', root^.op, ']');
end;
end;
end;

function viewtree(root : tree) : tree;

783デフォルトの名無しさん:2005/12/05(月) 03:30:41
begin
if (root^.left = nil) and (root^.right = nil) then
write('(', root^.data, ')')
else
begin
write('L['); viewtree(root^.left); write(']');
write('R['); viewtree(root^.right); write(']');
write(root^.op);
end;
viewtree := root;
end;

function growth(op : char; data : integer; lhs, rhs : tree) : tree;

var
t : tree;

784デフォルトの名無しさん:2005/12/05(月) 03:31:13
begin
if(lhs = nil) then
begin
new(t);
if(t = nil) then
begin
writeln('no memory.');
growth := nil;
{ break; }
end;
lhs := t;
lhs^.op := OP_NIL;
lhs^.data := data;
lhs^.left := nil;
lhs^.right := nil;
end;

new(t);
if(t = nil) then
begin
writeln('no memory.');
growth := nil;
{ break; }
end;
t^.op := op;
t^.data := 0;
t^.left := lhs;
t^.right := rhs;

growth := t;
end;
785デフォルトの名無しさん:2005/12/05(月) 03:31:43
function maketree(a : string; p : integer) : tree;

var
t, s : tree;
b : integer;
c : char;
d : integer;

begin
t := nil;
d := 0;

for b := p to length(a) do
begin
c := a[b];
if((ord(c) >= ord('0')) and (ord(c) <= ord('9'))) then
d := ord(c) - ord('0') + d * 10
else if((c = OP_ADD) or (c = OP_SUB) or (c = OP_MULT) or (c = OP_DIV)) then
begin
t := growth(c, d, t, maketree(a, b + 1));
d := 0;
break;
end
else if((c = OP_SPC) or (c = OP_TAB)) then
{ skip }
else
begin
writeln('Illegal function. [', c, ']');
break;
end;
end;
786デフォルトの名無しさん:2005/12/05(月) 03:34:44
キチガイの漏れが来ましたよ
787デフォルトの名無しさん:2005/12/05(月) 03:38:55
new(s);
if(s = nil) then
begin
writeln('no memory.');
{ break; }
end;
s^.op := OP_NIL;
s^.data := d;
s^.left := nil;
s^.right := nil;
t := growth('+', 0, t, s);

maketree := t;
end;

var
t : tree;
a : string[255];
b : integer;
788デフォルトの名無しさん:2005/12/05(月) 03:39:54
begin
write('calc: ');
readln(a);
b := 0;

t := maketree(a, 1);
viewtree(t);
writeln('');
write('result: ');

if(t = nil) then
writeln('no tree.')
else
b := calc(t);

writeln(b);
end.
789デフォルトの名無しさん:2005/12/05(月) 19:56:11
アズキリョウナのスレはここですか?
790デフォルトの名無しさん:2005/12/06(火) 00:41:11
ファイルの入出力までとGUIを少しやって試験みたいなんですが、どんな問題が出ると思いますか?
なんとか頑張って課題の、ファイルを読み込んで英語の文章の中にある
アルファベットの個数の分布を追加書きこみするってのはできたんですが、これ作るのに5時間かかったんで
これ以上難しいのでたら死んじゃいます
791デフォルトの名無しさん:2005/12/06(火) 01:10:55
死ねよカス
792デフォルトの名無しさん:2005/12/06(火) 01:11:14
死ねよカス
793デフォルトの名無しさん:2005/12/06(火) 01:23:31
二人も釣れるなんて、こんなヒドイスレだとは思いませんでしたwww
794デフォルトの名無しさん:2005/12/06(火) 01:27:26
氏ねよゴミ
795デフォルトの名無しさん:2005/12/06(火) 01:31:51
皆プログラム組むの飽きたんだね
796デフォルトの名無しさん:2005/12/06(火) 02:01:48
失せろタコ
797デフォルトの名無しさん:2005/12/06(火) 02:43:40
黙れ塵芥
798デフォルトの名無しさん:2005/12/06(火) 06:34:30
誰か居ますか
急速で宿題してほしいんですが・・・
799デフォルトの名無しさん:2005/12/06(火) 06:39:24
まあ、問題を書いてごらん。
800デフォルトの名無しさん:2005/12/06(火) 06:49:40
おお、ありがとうございます。
宝くじをするプログラムを作ってほしいのです。


1000円所持金があって、13%程度の当たりのある宝くじをやります。
当たれば3%で+500円、10%で+300円、はずれれば-100円。
基本的に、無限に続けられて、
2000円になれば、「凄い幸運の持ち主です」と表示させて終わらせる。
0円になれば、「残念ながら所持金が無くなりました」と表示させて終わらせる。
また、毎回「まだくじを引きますか?」と表示させ、
Enterで引く、0で終わらせる。


できますでしょうか?
もしめんどくさい箇所があれば簡易化してもらっても構いません。
例えば、13%で+500円とか。
801デフォルトの名無しさん:2005/12/06(火) 06:53:52
頼んでおいて本当に申し訳ないのですが、7:20か7:30ぐらいまでに仕上げて欲しいのです・・・
頼んでいる身として本当に申し訳ないのですが・・。

800がめんどくさそうであれば、

1000円所持金があって、13%程度の当たりのある宝くじをやります。
当たれば13%で+500円、はずれれば-100円。
10回くじを引ける。
2000円になれば、「凄い幸運の持ち主です」と表示させて終わらせる。
0円になれば、「残念ながら所持金が無くなりました」と表示させて終わらせる。

こういうのでも構いません・・
切羽詰ってまして、急がせて本当に申し訳ないのですが、宜しくお願いいたします
802デフォルトの名無しさん:2005/12/06(火) 06:56:09
こんなん30分もあれば余裕だろー
ちと待ちな。
803デフォルトの名無しさん:2005/12/06(火) 07:11:35
はい、よろしくおねがいしますm(_ _)m
804デフォルトの名無しさん:2005/12/06(火) 07:12:40
var
 Amount, Lot: Integer;
 S: string;
begin
 Amount := 1000;

 repeat
  Lot := Random(100);
  if Lot < 3 then
   Amount := Amount + 500
  else if Lot < 10 then
   Amount := Amount + 300
  else
   Amount := Amount - 100;
  WriteLn('所持金: ', Amount);

  if Amount >= 2000 then
  begin
   WriteLn('凄い幸運の持ち主です');
   Break;
  end else if Amount <= 0 then
  begin
   WriteLn('残念ながら所持金が無くなりました');
   Break;
  end;

  ReadLn(S);
 until S = '0';
end.

こんなんでどうよ?
805デフォルトの名無しさん:2005/12/06(火) 07:15:54
program kuji(input, output);
var
money, r : integer;
str : string[255];
begin
money := 1000;
randomize;
repeat
writeln('You have money : ', money);
write('Bet? ([Enter]: repeat / [n]: end) ?');
readln(str);
if(str[1] = 'n') then
break;
r := random(100);
writeln('rand = ', r);
if(r < 10) then begin
writeln('Win! +300');
money := money + 300;
end else if(r < 13) then begin
writeln('Win! +500');
money := money + 500;
end else begin
writeln('Lose! -100');
money := money - 100;
end;
if(money >= 2000) then
begin
writeln('You are very lacky.');
break;
end;
until(money <= 0);
end.
806デフォルトの名無しさん:2005/12/06(火) 07:16:31
何度かやってみたが漏れは最大1400・・・
807デフォルトの名無しさん:2005/12/06(火) 07:17:02
>>804
それだと確率がおかしくないかな
808デフォルトの名無しさん:2005/12/06(火) 07:18:32
本当にありがとうございました。
助かりました。
809デフォルトの名無しさん:2005/12/06(火) 07:19:32
>>804 は乱数初期化してないから毎回同じ結果になる
あと「あたりの合計」が13%にならない
810デフォルトの名無しさん:2005/12/06(火) 07:22:18
moneyとかに1000とか値入れといて、1〜100までランダム関数かなんかで発生させて、
もし1〜3だったら、money+500、もし4〜13なら(ryでで条件分岐させて
moneyが0になったときと、2000になったときでまた分岐
みたいなことだと思うんだけど
オレは802じゃないから
811デフォルトの名無しさん:2005/12/06(火) 07:23:50
2000超えるのは至難の業だな
いまのところ1600が最高
812デフォルトの名無しさん:2005/12/06(火) 12:20:04
宿題でなに遊んでんだw
813デフォルトの名無しさん:2005/12/06(火) 14:32:19
やっと2000超えた
814デフォルトの名無しさん:2005/12/06(火) 19:35:08
遊び感覚な方が早く習得できます。
815デフォルトの名無しさん:2005/12/06(火) 19:42:27
勉強って思うからやる気が起きないんだね
816デフォルトの名無しさん:2005/12/06(火) 22:07:17
Pascal でエロ画像表示出来ないですか?
817デフォルトの名無しさん:2005/12/06(火) 23:00:36
>>816
API叩くならできる。でもエロ画像はコンパイラに拒絶されるかもな。
818デフォルトの名無しさん:2005/12/06(火) 23:31:46
誰か宿題教えてください。
819デフォルトの名無しさん:2005/12/06(火) 23:44:47
>>781-788 で提出したのですが、
再提出を求められました。

せめて演算子の優先順位を
(* /) > (+ -)
にしろということと、
出来れば括弧 () の記述に
対応とのことです。

再提出期限は今週9日15:00です。

どこをどう直せば良いのかさっぱりで・・・
すみませんがよろしくおねがいします。
820デフォルトの名無しさん:2005/12/06(火) 23:48:26
まあ、他人の作ったものを、どこをどう直せば良いのか分からないのは当たり前だなw
821デフォルトの名無しさん:2005/12/06(火) 23:59:18
そんなことよりも僕の宿題も解いてみてよ!
822デフォルトの名無しさん:2005/12/07(水) 05:43:55
そんなことより僕の肛門も解かれそうです!
823デフォルトの名無しさん:2005/12/07(水) 06:15:01
オートマトンと使うんじゃないの?
824デフォルトの名無しさん:2005/12/07(水) 19:11:14
>>822
洗浄しておくように!
825デフォルトの名無しさん:2005/12/08(木) 05:47:52
vipper死ね
826デフォルトの名無しさん:2005/12/08(木) 06:34:31
vipper死ね
827デフォルトの名無しさん:2005/12/08(木) 08:10:47
以下の手続きをfunctionを用いて再帰関数で表したいのですが
どなたか教えて頂けないでしょうか。
828デフォルトの名無しさん:2005/12/08(木) 08:11:37
procedure move(var head : ptr);
var p,q : ptr;
begin
if head<>nil then
begin
p:=head^.next;
q:=head;
while p<>nil do
begin
if p^.word=str then
begin
q^.next:=p^.next;
p^.next:=head;
head:=p;
p:=q^.next;
end
else
begin
q:=p;
p:=p^.next;
end
end
end
end;
829デフォルトの名無しさん:2005/12/08(木) 11:57:37
習い始めの初心者ですみません
ベクトルa=(a1,a2,a3,a4,a5)b=(b1,b2,b3,b4,b5)
の内積a・bを求めよなんですが
program sum(input,output);
var a, b : array [1..5] of integer;
var i,ip,j : integer;
begin
writeln('ベクトルa=?');
   for i := 1 to 5 do read(a[i]) ;
   writeln('ベクトルb=?');
for j := 1 to 5 do read(b[j]) ;
ip := 0;
for i := 1 to 5 do
for j := 1 to 5 do begin
ip := ip + a[i] * b[j];
end;
writeln('内積a・b =', ip:8:3 );
readln
end.
(35) pc dai.p
dai.p:
6    for i := 1 to 5 do read(a[i]) ;
e 18450----------^--- Deleted illegal character
7    writeln('ベクトルb=?');
e 18450-------------^--- Deleted illegal character
すみませんどこが間違っているか教えてもらえませんか?
初心者で本当にすみません
830デフォルトの名無しさん:2005/12/08(木) 12:03:37
>>827-828
再帰構成にするとスタック使いすぎてよくない
そのままループで実装するのが良いので
無理に改悪する必要なし
831デフォルトの名無しさん:2005/12/08(木) 12:22:54
>>830
レスありがとうございます。
それがですね(-_-;)、再帰関数にせよという課題なんです。
832831:2005/12/08(木) 20:07:51
自己解決しました。
833デフォルトの名無しさん:2005/12/08(木) 20:12:44
>>832
それだとスレの趣旨にそぐわない。
やらせろと言ってるやつにやらせないとは何事か。
834デフォルトの名無しさん:2005/12/09(金) 18:12:33
not equalの記述の仕方を教えていただけませんか?

!=
~=
=/
ではダメでした
835デフォルトの名無しさん:2005/12/09(金) 18:14:51
すみません
自己解決しました
836デフォルトの名無しさん:2005/12/09(金) 23:33:42
すみません
セルフオナニーしますた
837デフォルトの名無しさん :2005/12/12(月) 02:15:45
文字列を標準入力から詠み込んで、
その文字列があるかどうかリストを先頭から捜し、
見つかったすべてのレコードを削除する手続きdeleteRecord(var head: ptr)を
作成せよ

という課題がでたんですけど、どなたかお願いします
838デフォルトの名無しさん:2005/12/12(月) 04:34:41
リストの要素書いて
839デフォルトの名無しさん:2005/12/12(月) 09:52:05
すいませんかけないです
線形リストの問題なのですが、ポインタ型つかってやれと言われてます
840デフォルトの名無しさん:2005/12/12(月) 11:25:51
deleteRecordのパラメータに探す文字列を与えないといけない

つまり
課題がでたらめ

つまり
自演
841デフォルトの名無しさん:2005/12/12(月) 12:18:02
procedure deleteRecord(var head:ptr);
begin
dispose(head);
end;

まさかこれだけの問題じゃないよな・・・?w
842デフォルトの名無しさん:2005/12/12(月) 13:48:08
まさかそんなに簡単なわけはないと思いますが

見つかったレコード全て削除できるんでしょうか
843デフォルトの名無しさん:2005/12/12(月) 18:19:15
>>837で書かれた情報だけでは不足。
与えられたものを全て書け。
844デフォルトの名無しさん:2005/12/12(月) 19:05:50
なぜでしょうか?
845デフォルトの名無しさん:2005/12/12(月) 19:47:31
そもそもノードの構造体宣言がわからねーとどうにもならんだろ
ネタにしてもクオリティ低すぎ。氏ね
846デフォルトの名無しさん:2005/12/12(月) 19:55:48
解らないから教えてくれと言いつつ、解っている人の言うことは聞かない。
意味不明。
847デフォルトの名無しさん:2005/12/12(月) 20:18:54
まぁ書きたいのはこんなかんじだろ
program twochpascal(input,output);type  list=record  name :packed array[1..20] of char;
next:^list;  judge:boolean; end;ptr = ^list; var meibohead,meibolast:ptr;
p,i:integer; procedure deleteRecord(var head:ptr); var c:packed array[1..20] of char; i,k:integer; last:ptr;
judge:boolean; count:integer; begincount:=0;
writeln('入力された文字列を削除します');writeln('文字列を入力してください');
readln(c); for i:=1 to 20 dobegin if ((ord(c[i]) >= ord('A')) and (ord(c[i]) <= ord('Z')) or (ord(c[i]) >= ord('a')) and (ord(c[i]) <= ord('z'))) then
begin count:=count+1; end; end;for i:=1 to count do begin
if head^.name[i] = c[i] thenbegin k:=k+1; end; if k=count then begin
judge:=true; end;if judge=true then begin last:=last^.next;head:=last; end; end; end; begin
new(meibohead); meibolast:=meibohead; writeln('何人読み込みますか?'); readln(p); for i:=1 to p do
begin meibolast^.judge:=false; writeln('登録する名前の入力'); readln(meibolast^.name);
new(meibolast^.next); meibolast:=meibolast^.next; meibolast^.judge:=true; end; meibolast:=meibohead; deleteRecord(meibohead);
meibolast:=meibohead; while not meibolast^.judge=true do begin
writeln(meibolast^.name); meibolast:=meibolast^.next; end; end.
つくりかけだが途中で嫌になった
ポインターを使ってデータ(名前)を先に入力して次に削除したい文字列を入力して
それを名前の中から一致すればその名前の一覧から一致した名前を削除したいのだろうとおもって
作っててた
例 aaa abc abb bac cccとかあったとしたら削除したい文字列abとすると
aaa bac ccc だけをレコードに残す

という問いかな?
848& ◆D3ra0B2LiQ :2005/12/12(月) 21:51:01
ありがとうございます 
やってみます


確かに情報不足勉強不足でした


でも844は偽
849デフォルトの名無しさん:2005/12/13(火) 01:15:36
Pascal って GC ありだっけ?
850デフォルトの名無しさん:2005/12/13(火) 05:03:57
リストって、TStringList の事では?

>>849
ゲームキューブ?

851デフォルトの名無しさん:2005/12/13(火) 14:27:33
ガベージコレクションなんて無いだろ
あってもじゃまなだけだしな
852ななしのP:2005/12/13(火) 15:58:06
入力された文字列があるのですが、場所を指定して、そこだけ消せるようなプログラムはどのようにすればよいのでしょうか?
853ななしのP:2005/12/13(火) 18:16:14
自己解決しました。
854デフォルトの名無しさん:2005/12/13(火) 20:47:18
セルフオナニーしますた
855デフォルトの名無しさん:2005/12/13(火) 21:12:50
あらいぐまパスカル。
あ、ラスカルだった。
856デフォルトの名無しさん:2005/12/13(火) 21:25:41
857デフォルトの名無しさん:2005/12/16(金) 16:28:54
pascalで外部ファイルのデータを行別に読み込むにはどうしたら良いですか

xに1行目
yに2行目
zに3行目

という感じです
858デフォルトの名無しさん:2005/12/16(金) 16:40:32
for文を使い9×9表をつくりなさい。
(罫線もひくこと)
制限時間は2分とする
859857:2005/12/16(金) 16:58:33
解決しますた
860デフォルトの名無しさん:2005/12/16(金) 19:02:24
1つの変数に2つ型を指定することはありませんか?
861デフォルトの名無しさん:2005/12/16(金) 19:03:03
>>860
日本語で頼む
862デフォルトの名無しさん:2005/12/16(金) 19:06:03
1つの変数に2つの型を指定することはできませんか?
863デフォルトの名無しさん:2005/12/16(金) 19:15:31
>>862
ヴァリアントという意味でしょうか?
詳しく状況を説明しやがれ。お願いします。
864デフォルトの名無しさん:2005/12/16(金) 19:18:08
それは変数を同時にに Char 型と Byte 型の2つの型としてアクセスしたいってこと?
1.キャスト

 c: Char;
 c := 'A';
 Byte(c) := #41

2.可変レコード
type
 THoge = record
  case Tag: Boolean of
   True: (c: Char);
   False: (b: Byte);
 end;

v: THoge;
v.c := 'A';
v.b := #41;
865864:2005/12/16(金) 19:18:48
おあ、そうか Variant もあったな。
866862:2005/12/16(金) 19:27:15
procedureで手続きを定義する際
変数にstringまたはintegerの値をとりたいんです
867デフォルトの名無しさん:2005/12/16(金) 19:29:28
その説明がまた、よく判らないですね。
引数でしょうか?戻り値でしょうか?
ローカル変数でしょうか?
厨房ですか?はっきりしやがれ!!!
お願いします。
868862:2005/12/16(金) 19:43:42
たぶんローカル変数というやつだと思います
869デフォルトの名無しさん:2005/12/16(金) 19:47:04
>>863-865ではダメなの?
870デフォルトの名無しさん:2005/12/16(金) 19:51:46
ローカル変数ならバリアントでいいんじゃね?
わざわざ1つの変数で扱おうってのが解らんが。
2つ作って使い分ければいいじゃん。
871862:2005/12/16(金) 20:00:45
なるべく手間を省こうと思い1つにまとめたかったのですが
バリアントというのでやることにします
ありがとうございました
872デフォルトの名無しさん:2005/12/16(金) 20:04:44
可読性が低下します。
メンテナンスに手間がかかります。

いいかげんにしやがれ!!!

ヴァリアントは実行時に
代入されるものが特定できない場合に
有効らしいですね。
873862:2005/12/16(金) 20:15:14
今使っている環境ではVariantは使えないようです
使い分けにしようと思います
874デフォルトの名無しさん:2005/12/16(金) 20:16:12
使えないということはDELPHIではないと。
875デフォルトの名無しさん:2005/12/16(金) 20:28:57
パスカル パスカル ルルルルルー
876862:2005/12/16(金) 20:42:13
>>874
emacsというのを使っています

↑答え方あってますか?
877デフォルトの名無しさん:2005/12/16(金) 20:46:33
GNUemacsか。不覚にも知らなかった。
878デフォルトの名無しさん:2005/12/17(土) 07:41:19
キャストじゃないの?
879デフォルトの名無しさん:2005/12/17(土) 09:35:16
>>862
integer型にする意味ってあるのか?w
char型にしといて計算が必要になったらcharをinteger型に直す関数を使い
計算し終わったらinteger型をchar型に入れなおすようにすればchar型で十分できると思う
880デフォルトの名無しさん:2005/12/17(土) 14:17:44
union
881デフォルトの名無しさん:2005/12/20(火) 02:29:43
GNUPascalでのハノイの塔のプログラムの仕方を教えてください。
882デフォルトの名無しさん:2005/12/20(火) 03:04:29
ハノイの塔のプログラムだな?
ハノイの塔を解くプログラムじゃなくて
883デフォルトの名無しさん:2005/12/20(火) 03:05:08
>>881です。
問題には6つprocedureを使うようになっているのですが、
中身がわかりません。
<途中までのプログラム>
program Hanoi(input,output);
type
pegarray=array[1..3,1..10] of integer;
toparray=array[1..3] of integer;
var
peg : pegarray;
top : toparray;
n,frompeg,topeg,positionsmallest : integer;
procedure ZeroArray(var peg : pegarray; n : integer);
{分からない}
procedure PutDisksOnPeg1(var peg : pegarray; top : toparray; positionsmallest,n : integer);
{分からない}
procedure PrintArray(var peg : pegarray; n : integer);
{分からない}
procedure SmallestTowhere(var positionsmallest,n,frompeg,topeg : integer);
{分からない}
procedure MakeMove(var peg : pegarray; top : toparray; frompeg,topeg : integer);
{分からない}
procedure DiskToWhere(var peg : pegarray; top : toparray; positionsmallest,frompeg,topeg : integer);
{分からない}
884デフォルトの名無しさん:2005/12/20(火) 03:08:26
>>881です。
すいません。ハノイの塔を解くプログラムです。
885デフォルトの名無しさん:2005/12/20(火) 06:46:34
886デフォルトの名無しさん:2005/12/20(火) 17:06:20
外部ファイルに書き出すときに元々の中身を残したまま
追加するにはどうすればいいですか
887デフォルトの名無しさん:2005/12/20(火) 17:07:52
>>886
Seek でケツに移動してから Write
888デフォルトの名無しさん:2005/12/20(火) 17:16:32
seekEofが使えるのはわかったのですが
使いかたがわかりません
できれば例文お願いします
889デフォルトの名無しさん:2005/12/20(火) 17:42:50
procedureのSmallestTowhereとMakeMove
に書くべき内容を教えていただけませんか?
出来れは例文を・・・

890デフォルトの名無しさん:2005/12/20(火) 19:04:16
このスレは
「例文をくれてやることで
早いうちに芽を摘むスレ」ですか。
そうですか。
891デフォルトの名無しさん:2005/12/20(火) 21:57:43
>>881のprocedure ZeroArrayの内容って下に書いたのでいいのかな・・・?
var i : integer;
begin
for i:=1 to n do
begin
peg[1,n]:=0;
peg[2,n]:=0;
peg[3,n]:=0;
end;
end;
892デフォルトの名無しさん:2005/12/21(水) 00:06:56
>>891
そんなレベルの低いプログラム書くなよw
893デフォルトの名無しさん:2005/12/21(水) 00:41:02
>>892さん>>891です。
どうすればよりよいプログラムになりますか。
教えてください。お願いします。
894デフォルトの名無しさん:2005/12/21(水) 01:08:42
FillCharってこと?

for i := 1 to Length(peg) do
 for j := 1 to Length(peg[i]) do
  peg[i, j] := 0;

ってこと?

そういえば何で配列1ベースなんだろ?
キモくね?
895デフォルトの名無しさん:2005/12/21(水) 01:15:45
>>894
>>883よく読め

for i := 1 to 3 do
for j := 1 to 10 do
peg[i, j] := 0;

だろ
896デフォルトの名無しさん:2005/12/21(水) 01:21:54
for i := 1 to Length(peg) do
for j := 1 to Length(peg[i]) do
 peg[i, j] := 0;
のLengthはどのように宣言すればいいのでしょうか?
897デフォルトの名無しさん:2005/12/21(水) 02:34:32
あ、Length ってDelphiのもんなのか・・・
スマン、ぐにゅは知らんかった。
898デフォルトの名無しさん:2005/12/21(水) 02:43:36
>>897
普通に使えるが・・・
899デフォルトの名無しさん:2005/12/21(水) 03:35:10
>>889
ぶっちゃけその二つがハノイの塔のプログラムのミソ。
SmallestToWhereは最小の円盤がどんな風に動くか考えて、
MakeMoveは青本P229にある通りに書けば良いよ。
まあ、例文よこせとか言ってる奴には分からないか。
今日言われただろ?オリジナリティを重視するから他人のプログラム
真似たところで点数もらえないって。

あ、そうだ。
誰が>>883を書いたかは特定できてるから覚悟しておくように。
1/10が楽しみですねwww
900デフォルトの名無しさん:2005/12/21(水) 05:36:12
>>889
ぶっちゃけその二つがハノイの塔のプログラムのミソ。
SmallestToWhereは最小の円盤がどんな風に動くか考えて、
MakeMoveは青本P229にある通りに書けば良いよ。
まあ、例文よこせとか言ってる奴には分からないか。
今日言われただろ?オリジナリティを重視するから他人のプログラム
真似たところで点数もらえないって。

あ、そうだ。
誰が>>883を書いたかは特定できてるから覚悟しておくように。
1/10が楽しみですねwww
901デフォルトの名無しさん:2005/12/21(水) 09:35:58
このサイト先生にばれたっぽいよw

ZeroArrayで詰まってる時点でもうだめだろ・・
902モナー氏:2005/12/21(水) 11:00:48
It's KuT++
903& ◆xTwoYEuCC. :2005/12/21(水) 14:38:56
SmallestToWhereの部分がわかりません。。。
904デフォルトの名無しさん:2005/12/21(水) 14:51:17
905& ◆Z2KySTSpOo :2005/12/21(水) 14:58:33
上のでわかるんですか??
906デフォルトの名無しさん:2005/12/21(水) 16:03:05
>>905
おまいさんが分かるかどうかは、おまいさんにしか分からない
907デフォルトの名無しさん:2005/12/21(水) 16:04:46
しらねえよ
自分で考えろ
908& ◆Z2KySTSpOo :2005/12/21(水) 16:25:06
死ね!>907
おめえも同じ学校のくせに 笑
909デフォルトの名無しさん:2005/12/21(水) 16:56:29
>>908
同じ学校だから何?
俺は面識も無い奴にホイホイと何でも
1から10まで教えるようなお人よしじゃないから。
>>900読んで分からないんなら本気で退学を考えた方がいいよ。
910デフォルトの名無しさん:2005/12/21(水) 18:57:59
そろそろ次スレ
911デフォルトの名無しさん:2005/12/22(木) 16:09:38
【課題】
問題の式(単語)+(単語)=(単語)を3行(各単語のみ)で入力し、
例:
SEVEN
+ ELEVEN
=IIKIBUN
という計算を満たす各アルファベットに入る一桁の数字を求める。
【期限】
12月26日12時
【補足】
全てのアルファベットは異なる値を持つ。また0にはならない。
解なしの場合は「解なし」と表示する。

どこから手をつけて良いのか分かりません。
どなたかよろしくお願いします。
912デフォルトの名無しさん:2005/12/22(木) 16:11:54
どういう方程式だwwwwwwwwww
913デフォルトの名無しさん:2005/12/22(木) 16:42:26
これは難問だな。
914まともに動いてない:2005/12/22(木) 20:59:08
>>911
覆面算でんがな。
まずは総当たりで左辺を作って足した結果の各桁と右辺を較べて矛盾がなければ解。
あとは無駄を省いていく。
915デフォルトの名無しさん:2005/12/22(木) 21:01:29
【ゴールデンレス】
  ∩ ・∀・)∩∩ ´∀`)∩  このレスを見た人はコピペでもいいので
   〉     _ノ 〉     _ノ10分以内に3つのスレへ貼り付けてください。
  ノ ノ  ノ  ノ ノ  ノそうすれば14日後好きな人から告白されるわ宝くじは当たるわ
  し´(_)   し´(_) 出世しまくるわ体の悪い所全部治るわでえらい事です
916デフォルトの名無しさん:2005/12/22(木) 21:08:46
なぜか3レス目が書き込めない。
917& ◆Z2KySTSpOo :2005/12/24(土) 14:29:14
It’s KUT!!!!!!!!!!!!!!!!!!!!!!!!!
918デフォルトの名無しさん:2005/12/24(土) 16:11:08
セブンイレブン良い気分では解無しになるのはわかった。
で、ロジックから考えてみた。
三つ以上の足し算をしないならほんのちょっとだけ楽になる。

式を文字に分解とかその辺は取り敢えず省略して説明。
配列なり何なりで0〜9の候補群Aと式に出てくる全文字の候補群Bを用意。
文字の出現パターンからBの各要素に各行に対する倍率を設定。
Bの各要素にAの各要素に対するフラグを持つ。
各行の右端の文字に当たる要素から0のプロパティをオフに。
もしn+n=nになってる桁があればnにあたる文字は0。
もしn+m=nになってる桁があればmにあたる文字は0か9。
右端の文字は繰り上がりの有無でパターンが制限できる。これは詳細わかるっしょ?
あとは各右端の文字のパターンに合わせて、倍率かけて足し算しながら、
数字がかぶらないようにしながら、残ってるパターンを総当たり。
最悪でもforループとif文の多重ネストぐらいは思い付くでしょ?

比較的単純な(時間がかかる)処理で良いならばこれで解決する筈。
919デフォルトの名無しさん:2005/12/25(日) 00:58:44
なろほど、できればソースを提示してください。
920デフォルトの名無しさん:2005/12/25(日) 01:55:11
総当たりだと、これ?
 for A := 0 to 9 do
  for B := 0 to 9 do
  for C := 0 to 9 do
  ...
921デフォルトの名無しさん:2005/12/25(日) 02:19:02
再帰汁
922デフォルトの名無しさん:2005/12/25(日) 03:59:12
再帰が難しかったので、こんなの考えてみました。
 for AtoI := 000000000 to 999999999 do
  for JtoR := 000000000 to 999999999 do
   for StoZ := 000000000 to 999999999 do
923デフォルトの名無しさん:2005/12/25(日) 04:01:55
あわわ、StoZ は 9 が一つ多すぎました(全部で8個)。
924デフォルトの名無しさん:2005/12/25(日) 04:27:53
再帰でやるとこんな感じ?
なんで再帰は難しく感じるのだろう?

var
 N: array['A'..'Z'] of Integer;

procedure Loop(C: Char);
var
 I: Integer;
begin
 for I := 0 to 9 do
 begin
  N[C] := I;
  Loop(C + 1);
 end;
end;
925デフォルトの名無しさん:2005/12/25(日) 04:43:38
>>922
その発想はなかったわ。
926デフォルトの名無しさん:2005/12/25(日) 06:22:12
Cが初期化されてません
927デフォルトの名無しさん:2005/12/25(日) 15:44:35
何でAからZまで全部使ってんだ?その中の10個までで良いんじゃねぇの?
928デフォルトの名無しさん:2005/12/25(日) 18:04:48
929デフォルトの名無しさん:2005/12/25(日) 18:06:53
あげてなかった。
っつーか、上の条件だと SEND + MORE = MONEY も解なしになる。
この条件で解のある問題を作るプログラムを次の課題にしたいくらいだ。w
930デフォルトの名無しさん:2005/12/25(日) 18:07:40
またあげてなかった。w
931デフォルトの名無しさん:2005/12/26(月) 00:29:21
検索すれば出てくるけど、そういうのは無し?
932デフォルトの名無しさん:2005/12/26(月) 03:55:42
同じ数字と0は使わないとあるから、最大で9文字か。
999,999,999は32bitで表現できるから、ループは一つでいい。
高速に重複チェックする方法はどんなのがあるかな。
933デフォルトの名無しさん:2005/12/26(月) 14:29:25
AAAAAAAAAA + B = AAAAAAAACD
934デフォルトの名無しさん:2005/12/26(月) 23:07:40
配列に1から9まで入れて、シャッフルしればいいんだよ!
全部で9!通りある。
935デフォルトの名無しさん:2005/12/26(月) 23:25:34
桁数決まってないから
9C1 + 9C2 + 9C3 + 9C4 + 9C5 + 9C6 + 9C7 + 9C8 + 9!
936デフォルトの名無しさん:2005/12/28(水) 15:17:43
すみませんがどこがどうバグっているのかわかりません。できれば改良もお願いしたいです・・・
丸投げです・・・はい・・・お願いします!!!

プログラムの概要は以下の通りです
―――――――――――――――――――――――――――――――
(1) 新郵便番号を入力すると対応する住所を画面に表示する.

(2) 住所名の一部を表す文字列を入力すると,その文字列を含む住所と
対応する新郵便番号のリストを画面に表示する.
リストは新郵便番号の昇順にソートすること.

ただし,郵便番号と住所の対応データをレコードファイルとして記憶する.

まず,検索しやすいレコードファイルを出力するプログラムを作成する.
次に,このレコードファイルを用いて上記(1), (2)の検索機能を実現する
プログラムを作成する.
―――――――――――――――――――――――――――――――
大変お手数ですが、新郵便番号は以下のURLからソースを入手してください

↓大阪の住所一覧(テスト用に使用。4000件程度)
http://www.vipper.org/vip166549.txt.html

↓全国の住所一覧(本番用に使用。12万件強)
http://uploader.fam.cx/data/u0826.txt
http://uploader.fam.cx/upload.htmlのu0826.txtです

大至急お願いします。もう丸投げです。というか提出期限22日です・・・
全部のソースを書き連ねると邪魔になるであろうと判断し、うpしました。
↓重ね重ね申し訳ないんですが下のURLから僕のプログラムを落としてください。
http://www.vipper.org/vip166548.txt.html
937デフォルトの名無しさん:2005/12/28(水) 15:21:46
〜続き〜

エラーメッセージが出るのはprocedure insearの箇所です。
どうもstring[50]辺りでおかしくなっているようです。
[の前にセミコロンが無いといわれます。
もうどうしようもないです。
そして、たった今教授からメールで今日中に提出しないと危ないよと宣告されました。
938ぴー☆6歳@ギコナビ ◆VuUl1LB0qU :2005/12/28(水) 15:42:24
>>937
wordは予約語
939936:2005/12/28(水) 15:59:25
住所録に関しての注意点。
同一の住所が複数行に渡って記載されている箇所があります。

5900158,大阪府,堺市,太平寺(696−2〜696−3、724−1、725−1、726−1、727,1,0,0,0
5900158,大阪府,堺市,、728、728−1、729、730、731、732、733−1〜,1,0,0,0
5900158,大阪府,堺市,733−2、735、786−3番地),1,0,0,0

このような場合、郵便番号と最後の数字が等しければ同一の住所であると判断できます。

長々と申し訳ありませんでした。本当に宜しくお願いします!!!!!!1
落としそうです!!!!

>>938
ご指摘のようにwordをwordzとしました。
しかしエラーメッセージは相変わらずでした
940デフォルトの名無しさん:2005/12/28(水) 16:57:58
procedure insear(x:packed array[l..u:integer] of char; word: string[50];t:boolean;wordlength,fin:integer;var i :integer);



procedure insear(x:packed array of char; word: string[50];t:boolean;wordlength,fin:integer;var i :integer);


添え字は0から始まるから注意
941デフォルトの名無しさん:2005/12/30(金) 03:19:38
>>936
とりあえずソースはもう流れてて確認できんが
どうせなら第4課題に備えた実装にすると吉

それと講師陣に最低1名VIPPERが居るから、ここはバレてる危険大
942デフォルトの名無しさん:2005/12/30(金) 16:02:36
ここはニュー速VIPだったのか・・・
てっきりプログラム板だと思ってたよ
943デフォルトの名無しさん:2006/01/02(月) 05:21:27
>>941
な、何故第四課題と知っているのですかwwwwwwwwwwwwwwwwwww
944デフォルトの名無しさん:2006/01/02(月) 05:24:08
>>941がそのVIPPERなんだろw
945デフォルトの名無しさん:2006/01/02(月) 19:56:46
>>944>>941 ですか?
946デフォルトの名無しさん:2006/01/02(月) 20:24:23
何でそうなるw
947デフォルトの名無しさん:2006/01/04(水) 23:52:03
ってゆうか、PascalってJavaに応用できんの?
948デフォルトの名無しさん:2006/01/05(木) 00:56:54
どっからJAVAが出てきたんだ?
949デフォルトの名無しさん:2006/01/05(木) 00:59:08
できないの?
950デフォルトの名無しさん:2006/01/05(木) 15:57:41
私は女子大生で〜す!学校でだされた課題がちょーむずかしの!!
だから誰か教えてください。
951デフォルトの名無しさん:2006/01/05(木) 17:41:21
>>950
聞くだけ無駄
952デフォルトの名無しさん:2006/01/05(木) 19:39:30
女子大生だと言えば快く手伝うとでも思ったらしいな。
この頭の弱い大学生めが。
953デフォルトの名無しさん:2006/01/05(木) 19:58:20
そんなにやって欲しけりゃ自分でスレ立てりゃえんちゃう?
954デフォルトの名無しさん:2006/01/05(木) 21:59:57
>>883
今さらながら、smallest〜プログラムの一部
var x:integer;
begin
frompeg:=positionsmallest;
x:=n mod 2;
if x=1 then
begin
positionsmallest:=positionsmallest - 1;
if positionsmallest < 1 then
begin
positionsmallest:=positionsmallest + 3
end;
end;
if x=0 then
begin
positionsmallest:=positionsmallest + 1;
if positionsmallest > 3 then
begin
positionsmallest:=positionsmallest - 3;
end;
end;
topeg:=positionsmallest;
こんな感じであってますか?
Pascalが出来る人チェックしてくれませんか??
あと、出来れば >>883 のPutDisksOnPeg1とPrintArrayの綺麗な?上手く見える??記述方法ってありませんか?
955デフォルトの名無しさん:2006/01/05(木) 22:06:38
本当に今更で一瞬、荒らしかと思った。
956デフォルトの名無しさん:2006/01/05(木) 22:35:34
すいませんm(_ _)m
なんかフツーなのしかできないんで、チェック&Put〜とPrintのプログラム
よろしくお願いします↑↑↑
957デフォルトの名無しさん:2006/01/06(金) 16:02:11
>>952
ほんとに女子大生なのに こんなこと言うなんでひどいわ!!!
友達からここのこと教えてもらって書き込んだのにあんまりやわ!!!
何でそんなに疑うの?
958デフォルトの名無しさん:2006/01/06(金) 16:39:17
>>957
いいからおっぱいうp
959>>952:2006/01/06(金) 18:54:15
>>957
すまんかった。
本当にちんこの付いてない人間が
この板にいるとは思わなかったのだ。
>>958
同感ですな。
おしりでもおま○こでもいいよ。
960デフォルトの名無しさん:2006/01/07(土) 01:16:21
>>952は950が女子大生で無いと疑っているとは限らないのでは?

それより、課題が見えないのだけど。
961デフォルトの名無しさん:2006/01/07(土) 03:46:28
>>956
君は永遠にプログラミングできるようにならないよ
962デフォルトの名無しさん:2006/01/07(土) 10:46:28
>>952は950が女子大生で無いと疑っているとは限らないのでは?
日本語を話してくれ。
963デフォルトの名無しさん:2006/01/07(土) 12:08:44
>>962
日本語を勉強してくれ。
964デフォルトの名無しさん:2006/01/07(土) 12:20:41
>>963
>>959で結論が出ている。
>>960は余計だった。
965デフォルトの名無しさん:2006/01/07(土) 18:06:44
自然数 N が与えられたとき、
1 から N までの数字を N 個並べる組み合わせをすべて
列挙するプログラムは Pascal で書くとどうなりますか?

例えば N = 3 のとき
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
となるようにです。
よろしくおながいします。
966デフォルトの名無しさん:2006/01/07(土) 18:24:31
for counter=1 to N do
begin
for counter=1 to N do
begin

end;
end;
まずこれが思い浮かんだ。
967966:2006/01/07(土) 18:34:56
修正。

for 1 to N do
begin
for counter=1 to N do
begin

end;
end;
968デフォルトの名無しさん:2006/01/07(土) 18:39:12
for i := 1 to N do
 for j := 1 to N do
 begin

 end;

だろ。
969966:2006/01/07(土) 18:47:16
間違えた。

for counter1 := 1 to N do
begin
for counter2 := 1 to N do
begin

end;
end;

だった。
970966:2006/01/07(土) 18:48:17
はっ!!!人に見つかってしまった。
971デフォルトの名無しさん:2006/01/07(土) 18:48:34
ここはアフォしかおらんのか
972デフォルトの名無しさん:2006/01/08(日) 06:26:25
シャッフルでしょ?
973デフォルトの名無しさん:2006/01/08(日) 09:51:38
>>971
うっさいボケ!自分もでけへんからひがんで荒らしてんのちゃうんか!
アホ↓↓
974デフォルトの名無しさん:2006/01/08(日) 11:44:59
function swap(var n : array of integer; p, q : integer) : boolean;
var
t : integer;
begin
t := n[p]; n[p] := n[q]; n[q] := t; swap := true;
end;
function perm(var n : array of integer; s : integer) : boolean;
var
i, j, k : integer;
begin
i := s - 1; j := s - 1;
while (i > 0) and (n[i - 1] >= n[i]) do begin i := i - 1; end;
if i <= 0 then begin perm := false; end
else begin
k := i;
while i < j do begin swap(n, i, j); i := i + 1; j := j - 1; end;
i := k;
while n[i] <= n[k - 1] do begin i := i + 1; end;
swap(n, k - 1, i); perm := true;
end;
end;
var
n : array [0..9] of integer;
i : integer;
begin
for i := 0 to 9 do begin n[i] := i + 1; end;
repeat
for i := 0 to 9 do begin write(n[i], ' '); end; writeln('');
until not perm(n, 10);
end.
975デフォルトの名無しさん:2006/01/08(日) 18:12:06
>>974
ハァ?頭悪いの?
976デフォルトの名無しさん:2006/01/08(日) 18:14:42
>>974
>ハァ?頭悪いの?

もはやこれだけでは
相手の頭の悪さを指摘するに足りんわけだが。
977デフォルトの名無しさん:2006/01/09(月) 16:28:02
FreePascalのスレを建てようと思う。
978taihenda:2006/01/11(水) 02:35:15
全くわけもわからず困っています。
明後日までに仕上げないといけない宿題なのですが、何回やっても上手く組めません(>_<)

Delphi 6を使用
(問題)最小2乗法により直線近似をおこなうプログラムを作成する。
プログラム中には1)条件判定2)繰り返し3)配列の3つをかならず用いる。
実行画面は、(x,y)=(1,2),(2,4),(3,4),(4,6)と(x,y)=(1,2),(1,3),(1,4),(1,5)の二つの場合を示すこと。

(最小2乗法)n個の点(x1,y1),...,(xn,yn)が、ある直線の周りに散らばっているとき、それらにたいしてy=a+bxで近似する。
mx=1/nΣxi
my=1/nΣyi
sx=Σ(xi-mx)2乗
sxy=Σ(xi-mx)(yi-my)
b=sxy/sx
a=my-bmx
979デフォルトの名無しさん:2006/01/11(水) 06:49:59
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
980978:2006/01/11(水) 08:18:23
事故解決しました(><)
981taihenda:2006/01/11(水) 18:10:25
いや、できてないです。。。
982デフォルトの名無しさん:2006/01/11(水) 22:15:41
次のかたどうぞ
983デフォルトの名無しさん:2006/01/11(水) 23:32:37
このスレの宿題を
人にやってもらおうという人間を
パスカルで抹殺したいのですが。
984デフォルトの名無しさん:2006/01/12(木) 00:27:29
スレの趣旨に反するだろ
バカかお前
985デフォルトの名無しさん:2006/01/12(木) 00:37:29
スレの趣旨に反するだろ
バカかお前
986デフォルトの名無しさん:2006/01/12(木) 00:42:46
スレの趣旨に反するだろ
バカかお前
987デフォルトの名無しさん:2006/01/12(木) 00:46:41
988デフォルトの名無しさん:2006/01/12(木) 00:47:29
スレの趣旨に反するだろ
バカかお前
989デフォルトの名無しさん:2006/01/12(木) 00:48:56
スレの趣旨に反するだろ
バカかお前
990デフォルトの名無しさん:2006/01/12(木) 00:51:53
>>984 00:27:29
>>985 00:37:29
>>988 00:47:29

次は 00:57:29 にtry
991デフォルトの名無しさん:2006/01/12(木) 05:31:22
次のかたどうぞ
992デフォルトの名無しさん:2006/01/12(木) 19:17:14
パスカルで愚かな人類を抹殺したいのだが。
993デフォルトの名無しさん:2006/01/12(木) 19:37:20
スレの趣旨に反するだろ
バカかお前
994デフォルトの名無しさん:2006/01/12(木) 20:10:32
994
995デフォルトの名無しさん:2006/01/12(木) 20:44:53
995
996デフォルトの名無しさん:2006/01/12(木) 21:20:42
アイランド・パスカルを地球に降下させて
愚かなる地球連邦教えて厨に大打撃を与える予定。
997デフォルトの名無しさん:2006/01/12(木) 21:33:50
997
998デフォルトの名無しさん:2006/01/12(木) 21:34:01
998
999デフォルトの名無しさん:2006/01/12(木) 21:35:54
                 l⌒i _
 きしゃぽっぽ       ┌(#))-┐ :: ̄`ヽz..,,_
            / ̄,r'´⌒ヾ:,^/ ̄|;;;:;|ll.|l.llll
   (゙,,゙゙゙゙,,,゙,゙)     |;;;::〔_|  ¢. |||. /~''=| ‖ |
   <|,____∧      |;;:: 人.,999 ノ;:| |≧フ|_,,!.-''"
  (*‘ω‘ *)    .|;:::庄兀巫兀庄|_//,-''"
  .(゙,,゙゙゙゙,,,,,゙゙,゙)    {二二二二二二}}フ)    /`〜'ヽ
  /    |      ヘテ合氏ァ/     、人=====ソ
  ゙゙゙゙ v゙v゙゙゙゙       .__/__ /_      (><; ) < スリーナインです!
       ぼいんっ_/______/__      ノ^ソ~~~ヽ
     川       /________/__      ノ λ  #ヽ
   ( (  ) )            /        ゙゙゙゙゙ v゙v゙゙゙ ゙゙
1000デフォルトの名無しさん:2006/01/12(木) 21:36:24
1000ゲットだ。
見たか!!!
俺は華麗。
そして
吉良上野介。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。