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
893 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 23:49:10 ] 7の(7の7乗)乗 の下一桁の数字は? nの(nのn乗)乗 の下一桁の数字は?
894 名前:空落ち ◆SniperBHgo [2009/04/30(木) 00:35:53 ] >>893 program test(output); const N = 7; var i, x : integer; function Power(a,b:integer):integer;{aのb乗} var t, i : integer; begin t := 1; for i := 1 to b do begin t := t * a end; Power := t end; begin x := 1; for i := 1 to Power( N, N ) do begin x := ( x * N ) mod 10 end; writeln( x ) end.
895 名前:デフォルトの名無しさん [2009/04/30(木) 08:15:17 ] >>894 のプログラムはnが大きくなるとダメポ
896 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 18:15:07 ] どうやってプログラム作ってもそれは同じことだと思うが それともNが無限に近い数でも保持できる計算機がこの世に存在するの?バカなの?
897 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 18:39:42 ] 7の7乗なんて全部計算する必要ない。 中途の計算で下一桁だけ求め続ければいい。
898 名前:デフォルトの名無しさん [2009/04/30(木) 20:20:53 ] >>896 そんなあなたに (labels ((ps (n m) (if (= m 0) (mod n 10) (mod (expt (ps n (1- m)) n) 10)))) (defun pg (n) (ps n n))) そんで (pg 7) ってやってみ 速攻で求まるから
899 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 22:01:09 ] 計算間違いがあるようです
900 名前:デフォルトの名無しさん [2009/04/30(木) 23:06:30 ] 計算まちがい以前にpascalのプログラムなんてNが2桁になると計算できないじゃん ところでNが100以上の時の値を計算できる人いる?
901 名前:空落ち ◆SniperBHgo [2009/05/01(金) 00:33:48 ] N^Nを計算することによる桁溢れの問題をなくしました. でも,アルゴリズムを全く工夫していないから計算がとても重い. program test(output); const N = 10; type ZeroToN = 0..N; OneToN = 1..N; OneToNPlusOne = 1..N+1; CountArr = array [1..N+1] of ZeroToN; var count : CountArr; i, x : integer; EndFlag : boolean; procedure Increment( var count : CountArr; a : OneToNPlusOne ); begin if ( count[a] <> N-1 ) then begin count[a] := count[a] + 1 end else begin count[a] := 0; Increment( count, a+1 ) end end;
902 名前:空落ち ◆SniperBHgo [2009/05/01(金) 00:35:03 ] begin{main} for i := 1 to N+1 do begin count[i] := 0 end; x := 1; EndFlag := false; repeat x := ( x * N ) mod 10; Increment( count, 1 ); if ( count[N+1] = 1 ) then begin EndFlag := true end until EndFlag; writeln( x ) end.
903 名前:デフォルトの名無しさん [2009/05/01(金) 03:25:08 ] N=100 test=0 N=101 test=1 N=102 test=6 N=103 test=7 N=104 test=6 N=105 test=5 N=106 test=6 N=107 test=3 N=108 test=6 N=109 test=9 N=110 test=0 N=111 test=1 N=112 test=6 N=113 test=3 N=114 test=6 N=115 test=5 N=116 test=6 N=117 test=7 N=118 test=6 N=119 test=9 N=120 test=0 N=121 test=1 N=122 test=6 N=123 test=7 N=124 test=6 N=125 test=5 N=126 test=6 N=127 test=3 N=128 test=6 N=129 test=9 N=130 test=0 Real time: 0.028037 sec. Run time: 0.026363 sec. Space: 593392 Bytes GC: 1, GC time: 0.011386 sec. N=100~130の値を求めました。 そんなに重くなかったっす。
904 名前:デフォルトの名無しさん [2009/05/01(金) 03:33:49 ] lispで4行で済むプログラムがなぜにpascalだと アホほど長いんだ? しかも遅いしな。
905 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 05:42:29 ] 0 1 6 7 6 5 6 3 6 9 0 1 6 3 6 5 6 7 6 9
906 名前:デフォルトの名無しさん [2009/05/01(金) 06:50:36 ] 7^n≡{7,9,3,1} (mod 10) とループするので、指数の7^7が4で割っていくつ余るかが問題になる。 7^n≡{3,1} (mod 4) から、 7^7≡3 (mod 4) 従って、 7^(7^7)≡3 (mod 10) となる。
907 名前:デフォルトの名無しさん [2009/05/01(金) 07:09:50 ] ある国のお話。 この国は一夫多妻制です。 しかし現在この国には男女はほぼ同じ割合いるので当然男が余ってしまいます。 そこで王様は一計を案じました。 次のような法律を作ったのです。 1.女児を産んだ者には経済的に援助し更に子作りに励んでもらう。 2.一度でも男児を産んだ者は以後決して子供を作ってはならない。 これには国の男性たちも大喜び。 数十年もたてば国は女性の比率がぐんと上がるだろうとみな思いました。 問題。 実際には男女比はどうなると思いますか?
908 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 07:54:05 ] 一つの正三角形をうまく切って、相似比1:1:2 の相似な図形3つに分けるにはどうしたらよいか。
909 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 13:13:25 ] >>907 なんだっけ 女が上になってビンタしながらSEXすると 女が産まれやすいとか聞いた
910 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 13:36:53 ] いや、ポイントは、 (1) 女をよろこばせない (2) 浅いところで出す だよ。 女が喜ぶほど酸が薄くなるらしい(=酸に弱いY 染色体が生き残りやすくなる)。 深いところに出す(=卵子への到達距離が短い)と、瞬発力のある Y 染色体が勝つ可能性が高くなる。
911 名前:デフォルトの名無しさん [2009/05/01(金) 13:44:11 ] 女を増やすには>>910 の方法を実践しなければダメだということだな。 >>907 を実践しても男女の出生確立は変わらないので結局、女は増えないしな。 というわけでプログラムを考えるまでもなく結論が出てしまいました。
912 名前:デフォルトの名無しさん [2009/05/01(金) 13:48:36 ] ×確立 ○確率
913 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 14:26:42 ] >>910 ためになるスレだがあと1年早く聞きたかったな
914 名前:代記 [2009/05/26(火) 15:40:21 ] 二個の自然数nとkを適当に定めて、k個の黒石1と(n-k)この白石0を一列に並べる並べ方を、重複なくすべて列挙するプログラム を作成して欲しいです。丸投げをしてしまって申し訳ないんですが、お願いします。
915 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 17:35:21 ] nPk?
916 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 18:57:27 ] >>914 1〜nの自然数からk個選ぶプログラムを考えればいいだけ
917 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 17:47:21 ] ax2+bx+c=0の解を計算するプログラム(判別式D=b2-4acが負のときは、解が複素数であると出力するようにする)の作り方がわかりません。 丸投げですみませんが、どなたか知恵を貸してくださいです。お願いします。
918 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 18:40:51 ] 解の公式をプログラムで表現するだけだろ。
919 名前:デフォルトの名無しさん [2009/06/02(火) 23:15:50 ] >>917 もう諦めた方がいいかもな。
920 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 03:31:29 ] 知恵だけなら ぐぐれ 答えはある
921 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 13:41:11 ] 初歩的な問題だったorz できました。ありがとうございます
922 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 21:17:29 ] まだ解決してません!早く答えをお願いします。 期限は明日の朝くらいでいいです。
923 名前:デフォルトの名無しさん [2009/06/04(木) 10:08:48 ] >>922 パスカルは使った事が無いのでLispで作っときました。 (defun d (a b c) (if (< (- (* b b) (* 4l0 a c)) 0l0) (print "解が複素数である"))) 勝手にパスカルに直してください。
924 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 01:20:32 ] 言語はLispでも良かったのでそのまま提出しました。 ありがとうございます。
925 名前:デフォルトの名無しさん [2009/06/16(火) 01:52:25 ] 123456789の順に数字を並べて,数字の間に+,−を補うことで式を作り, その値が100になる組み合わせをすべて求め,その式を出力するプログラムを作成しなさい. お願いします
926 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 18:08:51 ] 組み合わせはゼロだな。 全て足し合わせても100には満たない.
927 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 19:28:33 ] 小町算でしょ
928 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 20:12:12 ] >>926 頭固いなw
929 名前:デフォルトの名無しさん [2009/06/17(水) 00:09:26 ] 12345+6789だと少なくとも100は越えるな
930 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 20:00:47 ] >>925 に挑戦してるんだけど、プログラミング初心者には、難しめですか? 配列をfor文で回すので、良いのかな? 配列とかfor文って基本的な処理だと思うんだけど、うまく使えないんだよなぁ。 ネストしたループ文がゴチャゴチャしちゃって。 どなたかヒントいただけないでしょうか? 基本的な構造は、配列を使ったループ文で作ればいいのでしょうか?
931 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 23:52:53 ] ネストが嫌ならある程度の処理でまとめて関数にしなさい
932 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 01:40:24 ] >>925 Pascalじゃないけど。 1:12-3-4+5-6+7+89= 2:123-4-5-6-7+8-9= 3:123-45-67+89= 4:123+4-5+67-89= 5:123+45-67+8-9= 6:12+3-4+5+67+8+9= 7:12+3+4+5-6-7+89= 8:1+23-4+56+7+8+9= 9:1+23-4+5+6+78-9= 10:1+2+3-4+5+6+78+9= 11:1+2+34-5+67-8+9= kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9479.txt
933 名前:930 mailto:sage [2009/06/18(木) 02:20:11 ] >>932 おぉ、C言語ですね。 俺の頭では、難しすぎました。面白そうな例題だったんで、取り組んでみたんだけど。 最初は、配列とFor文の組み合わせで、やっていたんですけど、配列を連結するとなると、 どんどん複雑になって、分けわからなくなりました。 簡単に紙の上の手書きでやってみたんですけど、数回やっている内に組み合わせが 多くなってきて、混乱しました。 +、−、連結の3種類に分類すると言うことが、肝ですね。 連結がパターンの中の一つと考えられなかったのが、残念です。 掲載された処理、読んでみます。
934 名前:930 mailto:sage [2009/06/18(木) 02:44:28 ] これは、自分が思ってるよりも複雑でした。 パターンが3種類ということ以外にも、配列を複数個使って回してるようです。 Delphi6 personalで、C言語からPascalに書き換えてみたいと思います。 >>925 さんじゃないですけど、非常に勉強になります。 932さん、ありがとうございました。
935 名前:デフォルトの名無しさん [2009/06/18(木) 18:04:27 ] Pascalで書いてみた。 932氏のプログラムと違うのは式を計算する方法だけ。 ・・・だと思うんだけど、どう違うかまではまだ読みきれてない。 結果は同じでした。 FreePascalなんで変なオプション入ってる。 あと、同じ理由で文字コードUTF-8です。 one.freespace.jp/amber_ale/text/kadai.pas
936 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 22:53:12 ] >>935 932さんも、935さんもネストが深くても、全体的にコードがすっきりして見やすいです。 課題をいかに分解し、一つ一つの処理にするかが、センスなんだなぁと思いました。 初心者には、勉強になります。 935さんのコードは、文字コードをSJISにして、オプションを一つ削除することで、 Delphi6 personalで実行できました。
937 名前:デフォルトの名無しさん [2009/06/23(火) 14:31:05 ] integer変数nに適当な与えてnを素因数分解し、 その結果を表示するプログラムを作りなさい。 神様まってますっ!!
938 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 17:39:32 ] そんな簡単なものも思いつかないようだとプログラム関係への道は止めた方が良い。
939 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 18:08:16 ] >>938 スレタイをいちおくまんかい嫁。
940 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 16:08:26 ] >>939 お前は>>1 を同じ数だけ読んでこい >■全く分かってない阿呆も放置しないで優しく対応 これをやっただけだろ
941 名前:デフォルトの名無しさん [2009/06/24(水) 16:42:38 ] >>937 できますた lispで作るとこんなもんです。 ↓ (defun p (n) (do ((x 2 (1+ x)) (y n)) ((= y 1)) (do ((z x)) ((/= 0 (mod y z))) (print z) (setf y (/ y z)))))
942 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 20:51:42 ] >>937 C言語 /* (defun p (n) (do ((x 2 (1+ x)) (y n)) ((= y 1)) (do ((z x)) ((/= 0 (mod y z))) (print z) (setf y (/ y z)) ) ) ) */ void p(int n) { int x, y, z; for(x=2, y=n; y != 1; x++) { for(z=x; y % z == 0; ) { printf("*%d", z); y = y / z; } } } int main() { int n; scanf("%d", &n); printf("1"); p(n); }