1 名前:デフォルトの名無しさん mailto:sage [2006/01/12(木) 00:45:25 ] 教育用(?)プログラムPascalの宿題をやって頂くスレ ■丸投げOK ■全く分かってない阿呆も放置しないで優しく対応 ■他言語はよそ逝け( ゚Д゚)ゴルァ ■DelphiもTurbo Pascalも完全対応 【本家】 www.borland.co.jp/delphi/ 【前スレ】 pc8.2ch.net/test/read.cgi/tech/1089719714 【関連スレ】 くだすれDelphi(超初心者用)その15 pc5.2ch.net/test/read.cgi/tech/1087823906/l50 Pascal の初心者用の質問・相談所 pc5.2ch.net/test/read.cgi/tech/1009903617/l50 【Delphi初心者】今から始めるDelphi Part01 pc5.2ch.net/test/read.cgi/tech/1062422335/l50
710 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 23:38:54 ] ダイアを描くプログラムですが、これを壁に当たれば入射角=反射角で跳ね返るように動かすことはできませんか? procedure TForm1.Button1Click(Sender: TObject); const max=50; procedure line(x1,y1,x2,y2:integer); begin canvas.MoveTo(x1,y1);canvas.lineTo(x2,y2) end; procedure dia(x0,y0,r,n:integer); var xs,ys:integer;{始点} xe,ye:integer;{終点} i,j:integer; {ループ変数} t:real; {角度} begin t:=2*pi/n; for i:=1 to n-1 do begin xs := x0 + round(r*cos(t*i)); ys := y0 + round(r*sin(t*i)); for j:=i+1 to n do begin xe := x0 + round(r*cos(t*j)); ye := y0 + round(r*sin(t*j)); line(xs,ys,xe,ye) end end end; begin dia(100,400,70,11) end; end.
711 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 01:24:03 ] 問題を分離しよう ・描いた図形を動かす ・壁に衝突した事を検出 ・角度とか わからんのはどれよ
712 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 12:54:18 ] >>711 嫌われる技術系の見本だな。出来るか出来無いか聞かれているんだから 出来る、出来無いで答えてやればいい。出来るならコードを添えると好感度UP
713 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 22:41:40 ] >711 書いた図形を動かすのはできるのですが、あとの二つができません。
714 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 08:15:07 ] だったらくだらねえカキコしないでおめーが書きゃいいだろ、フルソース厨の>>712 さんよ。
715 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 11:53:47 ] グラフィックの宿題です。 ボールの大きさが変化しながら動いていくプログラムを作りたいのですが、初心者で全くお手上げです。 お願いします。
716 名前:デフォルトの名無しさん [2008/01/16(水) 19:49:40 ] p2cコンパイラをcygwin環境で使う場合どのようにすればいいんですか?
717 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 20:02:05 ] >>715 円を描くことは出来るんだよね? だったら、 1、前回の中心と半径を覚えておく 2、次の半径と、中心座標を求める。 3、前に描いた円を消す。 それには前に描いた中心、半径で 背景と同じ色で塗ればいい。 4、新しい半径と中心の違う円を描く、 5、Sleepとかでお休みする。 これで許してくれるだろ。 チラツクとか言われたら困るが
718 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 10:24:09 ] 正三角形を描くプログラムを教えてください。
719 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 11:41:57 ] DelphiのVCLを使えるの? なら procedure PaintAngle(Canvas:TCanvas;x0,y0,r0,deg:Integer); var w:Extended; i:Integer; pt:array [0..2] of TPoint; begin w:=PI/180.0*deg; for i:=0 to 3-1 do begin pt[i].x:=round(x0+r0*sin(w)); pt[i].y:=round(y0+r0*cos(w)); w:=w+2*PI/3; end; Canvas.Polygon(pt); end; //試験コード var x0:Integer=200; y0:Integer=200; r0:Integer=100; deg:Integer=0; ///////////// タイマーを貼り付けてダブルクリック procedure TForm1.Timer1Timer(Sender: TObject); begin Invalidate; deg:=deg+10; end; ///////////// フォームのOnPaintに procedure TForm1.FormPaint(Sender: TObject); begin PaintAngle(Canvas,x0,y0,r0,deg); end;
720 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 01:03:54 ] >>719 VCLなしバージョンをお願いしたいです・・
721 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 02:58:54 ] >>720 計算部分は書かれてるんだからあとは何とでもなるだろ
722 名前:デフォルトの名無しさん [2008/01/28(月) 14:36:07 ] 配列でDELETE(p,L)をするプログラムを教えてください。
723 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 19:54:19 ] ではまずDELETEとpとLを定義してください。
724 名前:デフォルトの名無しさん [2008/02/04(月) 16:36:18 ] 丸投げオッケーすか?
725 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 16:46:48 ] やってみればいいと思うよ。 出題側もこのスレ見てる筈で、 あなたは十分過ぎるリスクを背負ってるわけだから、 その勇気まで否定するものではない。
726 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:29:02 ] >>724 このコードを改造してくださいとか、やり方教えてくださいと 言う依頼より丸投げの方が良いな。 【質問テンプレ】 [1] 授業単元: [2] 問題文(含コード&リンク):() [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: (Delphi6、FreePascal、GNU Pascal等) [3.3] GUI/CUI: (GUI:ウィンドウにボタンなどがあってマウスで操作するタイプ) (CUI:殺風景な画面に文字が表示されるタイプ) [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) [5] その他の制限: (どこまで習っているか、使用/使用禁止ライブラリ等)
727 名前:デフォルトの名無しさん [2008/02/07(木) 02:53:41 ] 探索ニ分木で、tree型の変数tが指している節の2つ上の親を表したい時はどうすればよいのでしょうか。
728 名前:k [2008/05/21(水) 11:43:07 ] 元金M円と年利率xを端末から読み込み、M円を年利率xの複利で預けたときの1〜20年後の元利合計を計算して出力するプログラムなんですが・・・ program Fukuri(input,output); {複利計算} const Gankin= ; Nensu = ; var riritu, gokei : real; begin write(output, '利率は?'); readln(input, riritu); gokei :=Gankin *exp(Nensu *ln(1+riritu)); writeln(output, Gankin:1, '円を' , *riritu:3:1, '%の利率で' ,Nensu:1, '年預けると',gokei:4:2,'円となる') end. ここまでやったんですが・・・式がわかりません教えてください。
729 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 11:52:29 ] 複利といっても、 log /exp 使っていいの? 手計算とあわせるなら円単位で丸める必要はないの? で式が判りませんって、どういう意味?
730 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 12:21:44 ] 別に日割りとか必要はないんだろ? そうなら単純に繰り返し文使えば良いんじゃないのか?
731 名前:k [2008/05/21(水) 17:29:39 ] 1〜20年というのを繰り返し文でやるってことですか?
732 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 20:25:59 ] うん for 文使って M := M*(1+x/100) を繰り返すといい ただ 小数点以下が出て来るから、これをどう丸めたらいいの?
733 名前:k [2008/05/21(水) 22:11:50 ] for文はどこにどうやってすればいいんですか?小数点はそのままでいいと思います。 へたにroundとかつかうと自分はわからないんで。。。
734 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 00:09:48 ] program Fukuri(input, output); {複利計算} var riritu, kingaku: Double; Nensu: Integer; begin write(output, '利率は?'); readln(input, riritu); write(output, '金額は?'); readln(input, kingaku); writeln(output, kingaku: 4: 2, '円を', riritu: 3: 1, '%の利率で'); for Nensu := 1 to 20 do begin kingaku:=kingaku+kingaku*riritu/100; writeln(output, Nensu: 1, '年預けると', kingaku: 4: 2, '円となる') end; end.
735 名前:k [2008/05/22(木) 15:40:39 ] ありがとうございます。まだたくさんあるんですが・・・
736 名前:k [2008/05/22(木) 19:48:31 ] 正整数Nを読み込み、x^2≦N<(x+1)^2となる整数x、つまり√Nの近似値を求めるプログラムを、 sqrtなどの標準関数を使わないで作りなさいという問題なんですが。。。 わかりません。教えてもらえませんか?√のプログラムってなにをすればいいんでしょうか?
737 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:15:32 ] Delphiスレでサンプルコード書いてやったし 方法も書いてあげたでしょ?
738 名前:k [2008/05/23(金) 17:12:51 ] すみません・・・よくわからなかったんで。
739 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:18:30 ] よくわからなかったら別スレに投げるのか? 常識的には同じスレに質問するものじゃないのか。
740 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:41:00 ] ああ $ ついた文字は何かって質問か? ようするに整数の最大値の平方根までループすれば十分って事だ で、pascalはループ抜けたらループ変数は不定だから ホントは i を返すのは間違えている。 で、奇数を合計するのは昔は掛け算が遅かったからやってた事で 別に今なら x*x と比較したって同じだ。 順に x*x と比較してゆけばいい
741 名前:k [2008/05/23(金) 21:57:09 ] 詳しい説明ありがとうございます。でも自分には難しすぎます。 まだ全然習ってないことがたくさんで。。。
742 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 07:21:44 ] はあ、で、どこが判らないんだ?
743 名前:り [2008/05/24(土) 12:19:18 ] (1)2次方程式x2(二乗)+3x+k=0が異なる2つの実数の解をもつとき、定数kの値の範囲を求めよ。 (2)2次方程式x2(二乗)−2x+a−1=0が実数の解をもたないとき、定数aの値の範囲を求めよ。 (3)一個180円のケーキと一個240円のケーキを合わせて10個買い、代金を2000円以下にしたい。240円の ケーキをできるだけ多く買うとすれば、240円のケーキは何個買えるか。(消費税は考えない) (4)A町から20キロメートル離れたB町へ行くのに、自転車で時速12キロメートルで走っていたが、途中 で自転車が故障したので、それからは時速4キロメートルで歩いたところ、B町に着くまでの所要時 間は3時間以下であった。自転車が故障したのは、A町から何キロメートル以上の地点か。 (5)一の位の数が6である2けたの自然数で、十の位と一の位の数の和を4倍すると、もとの数より大き くなるものがある。 十の位の数をxとして不等式を作り、このような自然数をすべて求めよ。
744 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 12:50:54 ] それpascalの問題なのか?
745 名前:k [2008/05/24(土) 15:39:18 ] あの問題はもう諦めます。ありがとうございました。 次はこの問題で・・。 n 正整数Sを端末から読み込み、初めて1/i≧SとなるNを求めるプログラム なんですが・・・ i=1 狽フプログラムってなにをするんですか?
746 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 16:51:26 ] 取り憑かれちゃってるな。 実装はスレの性質上仕方ないがアルゴリズムも数学知識も人任せか。 そしてひとの説明を理解しようとする気さえないときてる。
747 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:04:51 ] Σの部分は function kansu(n:Integer):double; var i:Integer; begin Result:=0; for i:=1 to n do Result:=Result+1/i; end; になる。 これをループで呼び出して s と比較して大きくなれば終了とやればいい
748 名前:k [2008/05/24(土) 21:44:54 ] すみません・・・あとは自分で頑張ってやります。 function、double、Resultとかまだ習ってないのでわからないんです。 たぶん使わないでできると思うんですが・・・ とりあえず教科書読みながらやってみます。ありがとうございました。
749 名前:デフォルトの名無しさん [2008/05/25(日) 19:39:47 ] 標準入力から1行分だけ入力した文字が母音であるかを判定し、その下に(-)を付けるプログラミングを書きなさい。 ただし行の最後にはピリオドが入力されるとする。 <実行例> I am a pen. - - - - おそらくordを使うと思うんですが、まったく分かりません。 お願いします。
750 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 20:07:11 ] var s: string; i: Integer; begin ReadLn(s); for i := 1 to Length(s) - 1 do if s[i] in ['a', 'i', 'u', 'e', 'o'] then Write('-') else Write(' '); end.
751 名前:デフォルトの名無しさん [2008/05/30(金) 02:25:58 ] 正方行列に対して、P,L,Uを与えるoctaveのプログラムを作成せよ。 お願いします。
752 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 10:55:40 ] PLUってなんだ? 定義が出てないぞ。
753 名前:751 [2008/05/30(金) 13:27:00 ] 申し訳ありません。 Pが置換行列、Lが下三角行列、Uが上三角行列です。 お願いします。
754 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 01:23:14 ] [l, p, u] = lu(A) 以上。
755 名前:デフォルトの名無しさん [2008/06/12(木) 15:28:24 ] a[1..n]を昇順で整列するプログラムを直接挿入整列、直接選択整列の二通りで作成せよ お願いします。
756 名前:デフォルトの名無しさん [2008/06/25(水) 11:40:29 ] 横入りすいません 学校の課題で、パスカルで課題が出たんですがさっぱりわかりません;; 教えてもらってもいいですか?
757 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 15:43:02 ] いいですよ。
758 名前:756 [2008/06/25(水) 16:53:39 ] バカなんで1から教えてください;; 今日の夜12時ぐらいに問題文うpします
759 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 21:35:35 ] 何様なのだ!
760 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 13:04:36 ] バカは努力すべきだ
761 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 22:45:18 ] 学校でパスカルやってるけどパスカルの限界を感じ始めた・・・ めんどくてもいいからまともなゲームの一つでも作れないのこの言語・・・
762 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 23:25:06 ] うちの大学の課題が大量にあってワロタw
763 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 17:22:17 ] >>761 素のpascalは厳しいかもしれないけど DelphiやLazarusなら出来るでしょ。
764 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 19:21:54 ] Port[ ]、PortW[ ]、MemW[ ]の解説お願い。 ググってみても分らん。
765 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 19:56:51 ] Port/PortW は I/O 命令 でしょ? それは 16bitの頃の奴じゃないのか? 今そんなの使ってるの? 環境は何?
766 名前:デフォルトの名無しさん [2008/07/07(月) 12:26:26 ] カエサル暗号とは、各文字をアルファベット順で3つ後の文字に置き換える暗号方式である。 カエサル暗号を拡張し、標準入力から入力された数字だけ平文の文字をずらす暗号化を実現せよ。 平文(暗号化前の文章)が書かれたファイルを入力とし暗号化されたものを出力ファイルに書き出すプログラムを作成せよ。 (例) 6が入力された場合 I am a pen. →O gs g vkt. 長桁計算を行う手続きPowerReal(A,x,n)を完成させよ。 Nは整数であるが、xは実数であるものとする。また、Aはxのn乗の長桁表記であるとする。 整数部、小数部ともに100桁を超えないx, nが与えられると仮定してよい。 上の2つの問題をお願いします。
767 名前:デフォルトの名無しさん [2008/07/08(火) 23:45:20 ] ファイル変数fにどうやって自分の入れたいテキストファイルをいれたらいいのか分かりません。 大学のだとreset(f,'ファイル名');という方言(?)でよみこめるのですが、 自宅のだとこうしているとコンパイルが通りません 詳しい方教えてください ちなみにコンパイラはfreepascalをつかっています。
768 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 00:13:39 ] >>767 解決しますた スルーでお願いいたします
769 名前:rat pt 01 [2008/07/13(日) 16:18:39 ] ハッシュ法でのデータ管理をするプログラムを作りたいんですが長いことPASCALに触ってなかったせいか全く分かりません。 どなたか教えていただけないでしょうか??問題の概要は以下のようなものです。 表に登録するデータについては、キーは英数字からなる長さ8までの文字列でデータ本体は整数(型名はintegerでよい)です。 ハッシュ表のサイズは11とします。 ハッシュ関数は文字列xの各文字のASCIIコードの総和を11で割った余りとします。 さらにメニュー表示として入力した文字により行う操作を決定します。 どの文字がどのような操作を行うのかは以下のとおりです。 's' の場合: ハッシュ表に登録されている全レコードを,ハッシュ関数値毎に(キーの値とデータの両方を)すべて表示します. 'r' の場合: さらに「キーの値」と「データ」を入力し,すでに同じキーをもつデータがあれば「二重登録」として検出し,そうでなければ,そのレコードをハッシュ表に登録します. 'e' の場合: さらに「キーの値」を入力し,そのキーをもつデータがハッシュ表に登録されているならば, そのデータを表示します.さらに削除するかどうかを入力させて,削除する選択をした場合にはそのレ コードを削除します.そのキーをもつデータがハッシュ表にない場合には「そのキーをもつレコードが ないこと」を出力しますが,ハッシュ表には操作を加えません. 'i' の場合: ハッシュ表に登録されている全レコードを,キーの値が小さい順に表示します.ここで「キー の値の順」とは,文字列の辞書順のことを意味します.Pascal では,文字列a,b に対して,a がb より 辞書的順序が先(小さい) ときには「a<b」で表現できます. 'd' の場合: 「'i' の場合」の逆で,キーの値が大きい順に表示します. 'q' の場合: プログラムを終了します.具体的には,実行文部の最後の「end.」の直前までジャンプ*2し ます. 長くなってすいません。ちょっとしたヒントでもいいので教えていただければ幸いです。
770 名前:デフォルトの名無しさん [2008/07/22(火) 16:32:51 ] 100!は?
771 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 16:05:04 ] 質問です。 nの値を入力してもらって n*nの二次元配列を作りたいのですがどうしたらいいでしょうか?
772 名前:デフォルトの名無しさん [2008/07/23(水) 23:58:15 ] >>766 の下の問題をお願いできませんか?
773 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 05:45:40 ] qはブーリアン型、x、yは整数で q := x = y てどういう意味ですか?
774 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 13:01:07 ] x=yがtrueならばqにtrueを x=yがfalseならばqにfalseを代入
775 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 06:21:34 ] >>766 阪大生乙
776 名前:デフォルトの名無しさん [2008/09/22(月) 11:17:39 ] case文と 部分列挙を使って星座を判断するプログラムを作るにはどーすれば??
777 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 21:12:49 ] 何から星座を判断するんだ?
778 名前:デフォルトの名無しさん [2008/10/25(土) 15:47:12 ] Pascalで、要素の列挙によって配列を宣言することは 可能でしょうか?たとえば var ZeroToFour : array of integer =(0, 1, 2, 3, 4); のように。また可能な場合には添字の範囲はどうなるので しょうか?(上の例だと ZeroToFour[0]=0, ...ZeroToFour[4]=4 (0オリジン) となるのでしょうか。それとも ZeroToFour[1]=0, ...ZeroToFour[5]=4 (1オリジン) となるのでしょうか。) どうぞよろしくお願いします。
779 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 18:40:55 ] >>778 処理系は何だろ?標準PASCALだとその宣言は出来ないはず。 type A = array[T1] of T2; が宣言方法だから、オリジンはT1の宣言による。っていうか、どうしたいか 自分で宣言する。
780 名前:デフォルトの名無しさん [2008/10/27(月) 19:25:43 ] パスカルの問題でわからないものがあるので教えていただけないでしょうか。 関数f(x0)=0、a 以上 x0 未満の値 x について f(x)<0 x0 より大きく b 以下の値 x について f(x)>0 の時、 f(a) と f(b) を通る直線と x 軸との交点を求め、その値を c としたとき f(c)<0 であれば c を新たな a とし、f(c)>0 であれば c を新たな b とする この操作を回数繰り返しいずれかの値を x0 とする。 関数 f としてはy=x2-x02 を用いて解け とあります。 かなり難易度の高い問題ですが、どうかこのプログラミングを教えていただけないでしょうか。
781 名前:デフォルトの名無しさん [2008/10/27(月) 19:55:18 ] この操作を回数繰り返し ↓ この操作を数回繰り返し 関数f=x^2−x。^2 です。 すみません。
782 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 23:07:36 ] >>780 問題が理解できないんだが… f(x) ってのは直線って書いてあるから一次関数ですよね? function f(x:integer):integer って事かな? x0 ってのがx:=0と解釈すると x=0の時、y=0の一次関数の事かな? で a<x<0 について f(x)のxに0からbの値を入れると f(x)は0より小さい値を返す f(a),f(b)とx軸との交点を求めと言われても f(x)がy=axの直線ならy=0となってしまい問題があまりにも簡単すぎます。 なにか文章を間違えている気がします。 普通の人が読んで理解できる文章にするか、 問題文のまる写しを乗せない事には解けません。 x^2はXの二乗って分かるけど、x。^2は見たことないです。
783 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 23:14:15 ] あー大分理解できました。 前言撤回です。 x。^2だけ意味不明です。
784 名前:デフォルトの名無しさん [2008/10/28(火) 02:13:25 ] ご迷惑をおかけしてすみません。 表示がうまくいかなくて…。 x。:「エックスゼロ」です。 関数f(x0)=0、a 以上 x。 未満の値 x について f(x)<0 x。 より大きく b 以下の値 x について f(x)>0 の時、 f(a) と f(b) を通る直線と x 軸との交点を求め、その値を c としたとき f(c)<0 であれば c を新たな a とし、f(c)>0 であれば c を新たな b とする この操作を数回繰り返しいずれかの値を x。 とする。 関数 f としてはy=x^2-x。^2 を用いて解け 問題についてはこの通りに出題されており、 どうやら平方根を回りくどく求めろと言っているようです。 xの範囲を表すと a<x<x。<x<b となるのですが、これではxが2回出ており、 どのようにプログラムを書けばよいのか困っています。
785 名前:778 mailto:sage [2008/10/28(火) 11:41:24 ] >>779 うっかり遅くなりましたが御教示ありがとうございます。
786 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 14:59:04 ] //2点を通る直線とX軸の交点Yを求める function xCross(ax,ay,bx,by:Double):Double; var a,b:Double; begin a := (ay*bx - by*ax)/(bx-ax); b := ay - a*ax; Result:=-b/a; end; //問題中のf(x)式、初期値をx0とする。 function f(x,x0:Double):Double; begin Result:= x*x - x0*x0; end; //今回の問題を解くメインループ function test(x,a,b:Double):Double; var x0,c,fa,fb:Double; begin x0:=0; while ((a<x) and (x<x0) and (f(x,x0)<0)) or ((x0<x) and (x<b) and (f(x,x0)>0)) do begin c := xCross(a,f(a,x0),b,f(b,x0)); if f(c,x0)<0 then a:=c else if f(c,x0)>0 then b:=c; x0:=c; end; Result:=x0; end;
787 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 15:01:06 ] >>784 ,786 翻訳すると f(x0)=0 (a<x<x0)でかつf(x)<0 (x0<x<b)でかつf(x)>0 のどちらかの場合 f(a)とf(b)を通る直線とx軸との交点を求めcとおき f(c)<0 なら a:=c f(c)>0 なら b:=c という計算を繰り返す と解釈しましたこれはどう見ても平方根を求めていません。 ソースにするとこんな感じ、 何の計算式かはわかりません。 これ計算の目的を問題の最初に示すべきだと思います、目的が分かりません。
788 名前:デフォルトの名無しさん [2008/10/28(火) 15:58:43 ] ご教授ありがとうございます。 コンパイルしてみたのですが In function `xCross': についてのエラーが出てきて手直ししても動かないのですがどうすれば良いので しょうか。 あと、問題のタイトルには 以下の考え方に基づいて与えられた正の数の平方根の値を求めるプログラムを作 成せよ。
789 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 16:08:35 ] へぇ、これで平方根が求まるんですか ならば、平方根が求まるように手直ししておきます。 あとコンパイル環境を教えてください、私はDelphi7で動作を確認しました。
790 名前:デフォルトの名無しさん [2008/10/28(火) 16:31:00 ] ありがとうございます。 コンパイルはターミナルで行っています。
791 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 17:54:59 ] >>784 これ、ニュートン法と呼ばれる平方根を求めるアルゴリズムですね 問題が非常に不鮮明で最初の一文が無いと到底理解できない設問です。 ハッキリ言って悪題ですね。 きわめてシンプルにするとこんな感じになります。 function fSqrt(x:Double):Double; var s,last:Double; begin Result:=0; if x<=0 then exit; if x>1 then s:=x else s:=1; repeat last := s; s := (x/s+s) * 0.5; until s<last; Result:=last; end; 原理は簡単なので「平方根、ニュートン法」で調べてください。 ターミナルはwindowsのネットワーク越しにコンパイルを行う通信クライアントだと思われます。 もしかしたら、コンパイラはPascalじゃなくCかもしれません。 使用言語やコンパイル自体が分からない場合は友達と相談してください。 でわでわ。
792 名前:デフォルトの名無しさん [2008/10/28(火) 18:40:46 ] 分かりやすい解説ありがとうございました。 非常に参考になりました。
793 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:29:54 ] >>792 同じ学校の生徒かな? それならコンパイル環境はたぶんgpcって言えばおk にしてもf(x) = x^2 - (平方根を求める数)^2で f(c) = 0のときcを解をするって平方根を求める問題なのにおかしいよなjk
794 名前:793 mailto:sage [2008/10/30(木) 23:46:38 ] >>793 の下2行僕の勘違いでした、ごめんなさい
795 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 01:50:51 ] 質問です テキストファイルに書かれた数字を 「文字」として読み込むのではなく「数」として読み込むときも file(f, c)として文字として読み込んだ後に ord('c')-ord('0')のようにして数に変換するんですか?
796 名前:ORZ [2008/11/06(木) 15:22:35 ] 大学でpascalの課題が出たのですが、配列に関してさっぱりわかりません。 こんな私ですが、教えてください。 問題「N x N 行列を2つ読み込み、その積を計算し、標準出力に出力するプログラムを作りなさい」 ただし、入出力の部分は関数か手続きを使用せよ、とのことです。 (Nは定数で10とする) よろしくお願いします。
797 名前:ORZ [2008/11/06(木) 15:26:52 ] ↑の続きですが、delphiを使っています。 何度もすみません・・・
798 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 23:25:37 ] 数学での行列の積は理解しているのか?
799 名前:ORZ [2008/11/08(土) 16:56:46 ] はい。計算の仕方はわかります。 それをどうやってプログラムするのかが浮かばなくて・・・
800 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 19:05:30 ] const n=10 type index=1..n; var a,b,c :array[index,index] of real; i,j,k : index; s :real for i:=1 to n do for j:=1 to n do begin s:=0; for k:=1 to n do s:=s+a[i,k]*b[k,j] c[i,j]:=s end
801 名前:デフォルトの名無しさん [2008/11/10(月) 16:45:07 ] 関数の問題なんですがまったくわかりません。 キーボードで入力された2つの整数の最大公約数を求める関数(function)を作り、 その関数を用いて分数の約分を行うプログラムを作成せよ。 (例) 分子を5、分母を10と入力した場合、結果として1/2を表示する。 とのことです。 よろしくお願いします。
802 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 17:15:43 ] ユークリッドの互除法と再起呼び出し
803 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 17:22:57 ] >>87-
804 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 09:03:42 ] emacsでプログラム書いてるのですが、 error: invalid operands to `+' error: incompatible type for argument 2 of `ace' error: routine declaration error: result of function `check' not assigned ↑のエラーの消し方がわからないのです 教えていただけないでしょうか
805 名前:デフォルトの名無しさん [2008/11/13(木) 14:10:59 ] 閏年計算のプログラムですが、変数iが初期化されないというエラーが出ました Delphi6を使っています var i:integer; begin if ((i mod 4=0) and (i mod 100<>0)) or (i mod 400=0) then writeln('leap year') else writeln('NOT leap year') end. どこが間違っているでしょうか?
806 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 15:07:37 ] 初期化すれば?
807 名前:デフォルトの名無しさん [2008/11/27(木) 13:51:47 ] どうやってプログラムしたらよいのか分かりません。 教えていただけないでしょうか。 配列の全要素のうち最小のものを配列の先頭の要素と入れ替える。 次に、配列 の 2 番目以降の要素のうち最小のものを配列の 2 番目の要素と入れ替える。 このような処理を配列の要素数から 1 引いた回数繰り返すと、すべての要素が 整列した状態となる。 このアルゴリズムに従って配列を整列させる(ソートする)プログラムを作成せ よ。 ただし、「配列の n 番目以降の要素のうち最小のものを配列の n 番目の 要素と入れ替える」という処理をサブルーチンとして作成すること。
808 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 09:05:02 ] 選択ソートで検索すればcで書かれたプログラムが沢山見つかるから それ参考にすればいいんじゃないかな 特に難しい事はないはず
809 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 09:09:59 ] ていうか>>488 で入れ替える所だけ関数にすればいいだけだね
810 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:19:38 ] プログラミング以前に問題文を理解してないのでは? まずは手計算でやれるか試してみ