- 1 名前:デフォルトの名無しさん [2008/10/30(木) 07:49:39 BE:113605834-PLT(24065)]
- あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】 回答者の便宜のため、質問の際は以下を行うことを推奨します。 ・質問は【質問テンプレ】を利用してください。 ・問題文は、出題されたまま全文を書いてください。 ・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。 ・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。 ・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。 ・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。 ・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。 【質問テンプレ】 [1] 授業単元: [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm 【C 関数検索 man on WWW】 www.linux.or.jp/JM/index.html 【過去ログ検索】 chomework.sakura.ne.jp/ 【wiki】 www23.atwiki.jp/homework/ 前スレ C/C++の宿題を片付けます 116代目 pc11.2ch.net/test/read.cgi/tech/1222813731/
- 82 名前:デフォルトの名無しさん [2008/11/03(月) 01:27:34 ]
- <<78
ちなみにifを使わないとしたら、どうなるでしょうか。
- 83 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 01:34:45 ]
- >>82
三項演算子使うぐらいしか思いつかん if(y==(x*x)) {putchar('*');} else {putchar(' ');} のとこを y==(x*x) ? putchar('*') : putchar(' '); にするとか。意味が感じられんが つーかなんでそんな偏屈じみた制約がついてるんだ
- 84 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 01:52:33 ]
- ふふふ、switchがあるぜよ?
- 85 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 01:55:04 ]
- >>77さん
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7921.txt 試してみてください。 修正箇所はソースにコメントで記載してあります。
- 86 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 02:10:56 ]
- >>85です
コメント忘れましたが、PrintList()のwhileの中身の順番を入れ替えてました
- 87 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 02:12:34 ]
- >>77
=76 でおくれた! とりあえず途中まで書いた。直してるうちに、原型がなくなったとかは内緒。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7922.txt 登録、表示まで実装。 ごめん、76で配列っていうのは、ただの勘違いw 制約条件のリスト構造忘れてたorz
- 88 名前:76=87=88 mailto:sage [2008/11/03(月) 02:25:58 ]
- >>77
もう一個。元のソースをいじるなら。 メモリの実体を確保せずにポインタを渡しても・・・ が、どこかでおきています。 【対策する所】 List list; //ここに何か。 InitList(&list); 【原因】、 /*headとtail初期化*/ void InitList (List *list) { list->head = list->tail = AllocFruits(); } で、listがどこもポイントしていないのに、 list->head、list->tailに値を代入していること。
- 89 名前:76=87=88=89 mailto:sage [2008/11/03(月) 02:29:16 ]
- うあ、いかん。読み違えた。
おとといから寝てないの、ひびいとるな・・・ 88は忘れて下さいorz
- 90 名前:デフォルトの名無しさん [2008/11/03(月) 03:27:32 ]
- [1] 授業単元:グラフの利用、データの可視化
[2] 問題文: @: 電気双極子の作る静電ポテンシャルは φ=(q/4πε){1/(x^2+y^2+(z-d/2)^2)^(1/2)-1/(x^2+y^2+(z+d/2)^2)^(1/2)} で与えられる。ここで、正負の電荷は、(0,0,5),(0,0,-5)に存在するとしたとき、つまりd=10のときのポテンシャルの概形を描け。ただし、q/4πε=1とせよ。 また、y=0として、x-z平面におけるポテンシャルのみを書けば良い。 図示する範囲は、xは-20と20の間、zは-40と40の間とし、その範囲を各々20等分、40等分して、21×41のデータとして入力せよ。 A: @と同様に+qの電荷が(0,0,5)、(0,0,-5)に、-2qの電荷が(0,0,0)に存在するとしたときのポテンシャルの概形を描け。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年11月4日16:00まで [5] その他の制限: 問題@だけでもいいのでお願いします。
- 91 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 03:43:36 ]
- gccでグラフ書くってgnuplotとかかな
- 92 名前:87=92 mailto:sage [2008/11/03(月) 04:23:40 ]
- >>77
削除部分も実装。参考程度に。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7923.txt >>91 なにかちがうきがする・・
- 93 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 04:33:39 ]
- グラフィカルにプッロトするのもあるけど、単に * で表すとか。
- 94 名前:=92 mailto:sage [2008/11/03(月) 05:27:07 ]
- >>90
環境の情報が足りないかと。 授業単元からして、、グラフの作成ソフトが別にありそう。 あとX-Windowは立ち上がってる? それと、使うライブラリ、何か指定は? これはどうみても、Cというより物理の問題になってる気がw 91の補足。 gnuplotを使うなら、Cから標準出力に、gnuplotのコマンドを吐いて、 パイプでつなぐ。 = Cの宿題ではなさそう とりあえず時間がないので、早めに情報出したほうが良いと思われ。 もう一個。 Cで書く前に、グラフ作成ソフトである程度結果をつかんでから始めたほうが早いです。
- 95 名前:=92 mailto:sage [2008/11/03(月) 05:36:14 ]
- >>90
う" 問題よく見たら、ただのトラップかw この式、グラフを書く時はほとんど定数扱いで、 変数はφとxとzだけ・・・ 2次元の平面(x-z)で、21x41のマスをつくって、そこの値を計算。 って、表計算と同じw ただ、マス目の中のデータ(数値)を可視化する要素が足りない。 とりあえずExcelでも立ち上げて、各マス目のデータ計算してくるか。。 問題はExcelが手元にない事だが。
- 96 名前: ◆NiyDyBDWQM mailto:sage [2008/11/03(月) 05:46:19 ]
- [1] 授業単元:プログラミングC
[2] 問題文(含コード&リンク): <関数 配列渡し> 以下のようなプログラムを作成しなさい. 2つの整数配列(要素数は任意)、配列Aと配列Bを受け取り,配列AとBの要素の値 の平均値(実数)をそれぞれ計算し、平均値が大きい方の配列の内容(整数)と平均 値(小数点第1位まで)を表示する関数を作る。また、この関数を使って以下の2つ の配列の平均値を比較するプログラム. 配列A{1,2,3,4,5} 配列B{2,3,4,5,6} ※関数に配列を渡す時は、関数内では配列の大きさがわからないので、以下の例 のように配列と配列サイズを渡す必要がある。 void func(int vector_a[], int vector_a_size); int vec[3] = {1,2,3}; func(vec, 3); // func(vec, sizeof(vec)/sizeof(int)); [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名 Cygwin [3.3] 言語:C [4] 期限: 11月3日 10時まで [5] その他の制限: まだまだ序の口のほうです。 期限まで時間があまり無いですが、どうか宜しくお願いします。
- 97 名前:=92 mailto:sage [2008/11/03(月) 06:23:45 ]
- >>96
期限なさすぎw というか、この時間に誰か起きてることを期待しちゃいけません。 ま、一瞬で終わる問題だが・・
- 98 名前:=92 mailto:sage [2008/11/03(月) 06:49:10 ]
- >>96
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7924.txt 釣りかと思ったけど、アップしとく。 ・doubleはどうせあふれないと想定されてるっぽいので、オーバーフローのチェック省略。 必要なら改造しましょう。まだ時間は十分あるw
- 99 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 07:01:46 ]
- >>98
ありがとうございました。 非常に助かりました。
- 100 名前: ◆7777.bQf6c mailto:sage [2008/11/03(月) 08:29:18 ]
- [1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7925.txt [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: Visual stdio 2005 [3.3] 言語: C [4] 期限: 11/3 24:00 [5] その他の制限:2次元配列とfor文を使ったものでお願いします
- 101 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 08:42:44 ]
- >>99
関数が題意満たしてないように見えるんだけどw
- 102 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 09:50:03 ]
- >>100
うpろだtxtの結果表示(AB)は正しいのでしょうか? どこを計算して先頭の"52"を導き出すのかがイマイチ・・・
- 103 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 09:58:47 ]
- >>102
52だと思うが。
- 104 名前:100 ◆7777.bQf6c mailto:sage [2008/11/03(月) 10:05:27 ]
- >>102
先頭の52の求め方は (5*9)+(-2*-1)+(1*5)=52 となります 行列の積の計算方法については、こちらを参照して下さい 【3行3列の行列の和と積の計算方法を教えて下さい。 -OKWave】 ttp://okwave.jp/qa87490.html
- 105 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:11:39 ]
- >>100
int AB[3][3]; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { AB[i][j] = A[i][0]*B[0][j] + A[i][1]*B[1][j] + A[i][2]*B[2][j]; } } printf("== AB ==\n"); for(i=0;i<3;i++){ for(j=0; j<3; j++){ printf("%3d",AB[i][j]); }printf("\n"); }
- 106 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:20:48 ]
- すまん、俺が寝ぼけているのかもしれんが、>>100の結果、やっぱおかしくないか?
- 107 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:25:32 ]
- #include <stdio.h>
#define N 3 int main(){ int i,j,ii; int a[N][N]={{5,-2,1},{9,2,9},{-3,7,4}}; int b[N][N]={{9,6,3},{-1,-2,-3},{5,3,1}}; int ab[N][N]; for(j=0;j<N;j++){ for(i=0;i<N;i++){ ab[j][i] = 0; for(ii=0;ii<N;ii++){ ab[j][i] = ab[j][i] + a[j][ii] * b[ii][i]; } } } printf("== AB ==\n"); for(i=0;i<N;i++){ for(j=0; j<N; j++){ printf("%3d",ab[i][j]); }printf("\n"); } return 0; }
- 108 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:27:42 ]
- 実行結果でのAの(2, 3)成分とコード中でのそれが食い違ってる。
たぶん、実行結果のAが正しい
- 109 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:31:08 ]
- わざとこういうミスをして、悩む学生を見ながらニヤニヤする変な教官とかいそう。
- 110 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:49:24 ]
- そういう言い訳をする教官もいそう。
- 111 名前:60=71=77 mailto:sage [2008/11/03(月) 11:25:53 ]
- 皆様、ありがとうございます・・・!
>>85さんのソースに、>>92さんの削除関数をアレンジして加えたのですが、 リストの一番後ろの要素を削除してそれをPrintListすると無限ループしてしまいます。listのtail部分がおかしくなっているからだと思うのですが、どう直せばよいか教えていただけないでしょうか? kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7926.txt 削除関数のアレンジした部分はコメントの※印部分です。お願いします。。
- 112 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 11:28:45 ]
- [1] 授業単元:計算機システム
[2] 問題文(含コード&リンク): 浮動小数点数のビットパターンを表示するプログラムを作成せよ。 そして、1.0 および、0.1, NAN, マイナス無限大, プラス無限大, その他適当な小数がどのようなビット列で表現されているか確認せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: 11月5日 [5] その他の制限:なし おねがいします。
- 113 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 11:38:58 ]
- なんか漠然とした問題だな
- 114 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 12:40:22 ]
- >>112
#include <stdio.h> #include <limits.h> int is_little_endian(){ int x = 1; return *(char*)&x; } typedef unsigned char byte_t; void print_bytebits_(byte_t value){ byte_t mask = 1 << (sizeof(byte_t) * CHAR_BIT - 1); for(;mask; mask >>=1) putchar(mask & value ? '1' : '0'); } void print_bits(void *p, int bytesize){ byte_t *p_byte = (byte_t*)p; int i; if(is_little_endian()){ for(i=bytesize-1; i>=0; i--) print_bytebits_(p_byte[i]); }else{ for(i=0; i<bytesize; i++) print_bytebits_(p_byte[i]); } } int main(){ double values[] = {1.0, 0.1, 0.0/0.0, -1.0/0.0, 1.0/0.0, -3.14}; int i; for(i=0; i<sizeof(values)/sizeof(*values); i++){ print_bits(&values[i], sizeof(double)); printf("(%.02f)\n", values[i]); } return 0; }
- 115 名前:デフォルトの名無しさん [2008/11/03(月) 12:46:05 ]
- [1] 授業単元:C
[2] 問題文(含コード&リンク): カレントディレクトリの".txt"という拡張子を持つすべてのファイルを 読み込み、ファイルに記載されているデータを二倍して".TXT"というファイルに出力しなさい。 ".txt"の拡張子前のファイル名はランダムな数字列であり(例:029340.txt)、 ファイルの中身は以下の5行1列からなる数値ファイルである。 .txt 3 5 2 4 5 .TXT 6 10 4 8 10 [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:borland C++ [3.3] 言語: C [4] 期限: 11月4日 [5] その他の制限:なし
- 116 名前:115 [2008/11/03(月) 12:47:39 ]
- >>115
すいません間違えました。 .TXTではなくて.Tです。
- 117 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 12:52:06 ]
- 半角を全角にするのもやればいいのか?
- 118 名前:デフォルトの名無しさん [2008/11/03(月) 12:55:34 ]
- >>117
すいません。 数値は半角です。
- 119 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 13:13:29 ]
- >>113さん
遅くなってごめんなさい。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7927.txt 修正箇所は申し訳ないのですがDIFFツールなどで調べてください。
- 120 名前:119 mailto:sage [2008/11/03(月) 13:15:53 ]
- アンカーミス
>>111さんでした 釣ってきます
- 121 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 15:28:51 ]
- >>115
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7928.c ファイル名が 数字のみ.txt であるかのチェックはあり、 中身が数字のみか、5行1列かのチェックはないんで そうなっているファイルを用意しておくこと。
- 122 名前:help me [2008/11/03(月) 15:37:36 ]
- >>65 お礼遅れましたすみません。 とても助かりました!
ありがとうございました。(^0^)
- 123 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 16:11:32 ]
- [1] 授業単元:C++
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7929.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:VS2008 [3.3] 言語:C++ [4] 期限:[2008年11月08日まで] よろしくお願いします。
- 124 名前:デフォルトの名無しさん [2008/11/03(月) 16:20:08 ]
- [1] 授業単元: 画像処理プログラミング
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7930.txt [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: 11月4日 よろしくお願いします。 期限が近いのにまったく手が出ません。
- 125 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 16:28:13 ]
- >>124
久々にめんどくさそうなの来たなwwww
- 126 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 16:30:47 ]
- 何をwwwwで笑っているのか知らんが、面倒臭いと思うのも個人の主観。
ぜんぜん面倒臭くない、単なるバイナリーデータの操作だろ、そんなの。 むしろ、オラッ、強敵が現れてなんだかwktkしてきた、ってゴクウみたいな 奴もいるかもしれんぞ?
- 127 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 16:35:43 ]
- >>126
もちろん>>124を明日までに一から作れる暇とスキルがあっての書き込みだよな?
- 128 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 16:44:45 ]
- >>126
多分おれのこと言ってるんだと思うけど今回はお前に宿題ゆずってやるよ
- 129 名前:100 ◆7777.bQf6c mailto:sage [2008/11/03(月) 16:45:49 ]
- 返信遅れてすいません
txtに書かれたプログラムは私の打ち間違いです、失礼しました それと>>105さん>>107さん、ありがとうございました
- 130 名前:60=71=77=111 mailto:sage [2008/11/03(月) 16:56:46 ]
- >>119さん
ありがとうございます。正常に動きました。 その他助けてくださった方々、本当にありがとうございました!
- 131 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 16:58:01 ]
- >>126さんが明日までにコンバータ作ってくれるそうです。良かったですね>>124
とりあえず両手を空に挙げてやるから元気玉でも集めて作ってみろよ。面倒じゃないんだろ?>>126
- 132 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:05:49 ]
- >>1 読める?読めない?聖徳太子(ry
要するに、個人を指定、特定して答えてもらうスレじゃないんだよ、ここ? やってくれるよ、良かったね?お前がやれよw
- 133 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:13:25 ]
- >>124はスルーする流れなのか?
- 134 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:26:35 ]
- >>66
レス遅れてすみません>< 1.出力は ・縦ではなく、横にならべる。つまり行。縦は1024列(絶対)。 ・各行は、data.txtのデータ(data[i])が(ave) + 5*(sd)以上の時だけ出力する しかし、[0][0],[0][1],[0][2],・・・,[205][3]をひとつの区切りとする。 この1024個中の標準偏差(ave) + 5*(sd)以上の値を出力する。 次に[206][0],[206],[1],・・・,[411][2],[411][3]の1024個中の標準偏差以上の 値を出力する。このとき、peak.txtに改行して出力する。 このようにdata.txtの値を1024個で区切る。 2.十分なメモリを確保のところ ソースは1次元に見えるけど、出力ファイルには2次元で!! mallocでメモリを確保したいのは、data.txtが約16Mもあるから!! 3.文章に間違えありました!!!! 5行209921列のデータではなく、209921行5列のデータです。 なので [0][0],[0][1],[0][2],・・・,[205][3] [206][0],[206][1],・・・,[211][3] [211][0],[211][1],・・・,[216][3] [217][0],[217][1],・・・,[222][3] ・ ・ ・ と1024個で区切れる。 どうでしょうか? プログラムよろしくお願いします。
- 135 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:27:45 ]
- >>132
必死なのは分かるが、とりあえず聖徳太子(ryのテンプレ教えてくれ。 あと>>124は最近傍法での拡大くらいまでは、と思ってるが、さすがに(4)はなんとかいうフォーマットから調べないかんなあ。
- 136 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:40:44 ]
- フォーマットはぐぐれば一発だよ
だからさっさと作っておくれー
- 137 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:57:05 ]
- >>124 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7931.txt
こんな感じか? コンパイルすらしてないコードなんで動かなかったら適宜修正してくれ。
- 138 名前:137 mailto:sage [2008/11/03(月) 18:04:34 ]
- flee... orz
- 139 名前:デフォルトの名無しさん [2008/11/03(月) 18:16:38 ]
- >>135
> 必死なのは 誰とも分からない見えない人に答えさせようとしているお前。
- 140 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 18:42:00 ]
- 日本語かc/c++でおk。
- 141 名前:デフォルトの名無しさん [2008/11/03(月) 18:50:01 ]
- C言語で数字を小数第一位まで表示させるにはどうすればようでしょうか。
- 142 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 18:51:23 ]
- %.1f
- 143 名前:=92 mailto:sage [2008/11/03(月) 19:43:57 ]
- 久しぶりに夕方まで寝てしまった。。。
>>101 問題読み違ってた? ま、あとはがんばれw
- 144 名前:=92 mailto:sage [2008/11/03(月) 20:02:13 ]
- >>90
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7934.txt 計算する所までは実装。計算結果は@:dataout1.csv、A:dataout1.csvに出力。 グラフ化の部分は、環境がわからんのでパス。3次元のグラフを*で書く気にならなかった。 csv内のデータは、横方向:x(-20〜20)、縦方向:z(-40〜40)、値:φ(x,z) 電荷ごとに、0除算のオーバーフローをdoubleの最大値として処理しているので、 Aの結果が上下対象になっていません(斜めにdoubleの最大値が入る)。 計算結果の検算とAの式のチェックは、がんばれ。 Aの処理はコメントアウトしてあります。 Aを使う時は@の処理をコメントアウトしてから、 Aの処理のコメントアウトを解除します。 Aは、せめて式とdの値を書かないと。 ここは電磁気学の板じゃないので。 適当に調べてかいといたけど・・
- 145 名前:=92 mailto:sage [2008/11/03(月) 20:11:49 ]
- >>134
っ計算機 5も209921も奇数。よって、5x209921も奇数。 1024は偶数。 従って割り切れることはありません。 +[0]〜[3]なら、要素数は4。 問題を解く前に、概算するくせをつけましょう。
- 146 名前:=92 mailto:sage [2008/11/03(月) 20:22:21 ]
- >>134
連投すまん。 1024個単位なら、256x4。 従って、 [0][0]〜[0][3] ・・・ [255][0]〜[255][3] [256][0]〜[256][3] ・・・ [511][0]〜[511][3] という感じになるはず。 あと、メモリのところ。 [0][0]〜[0][3] ・・・ [255][0]〜[255][3] だけ確保して、1024個分を順次読み込み、1024個単位で処理すれば、 17.2MB分をmallocする必要はないと思うのだが、なぜ確保するのか? (全体をメモリに格納しないと処理できない計算が発生するのか?) これが知りたい。
- 147 名前:デフォルトの名無しさん [2008/11/03(月) 20:28:02 ]
- y=cos(x)の座標を表示させようとしているんですけど、次のプログラムって何が変なんですか。
int main(){ double x, y, pai=3.14, cos; for(y=1; y>=-1; y++){ for(x=1; x<=4*pai; x++){ if(y==cos(pai/x)){ putchar('*'); } else{ putchar(' '); } putchar('\n'); } } return 0; }
- 148 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 20:47:07 ]
- 1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): 無限級数 (1)Σx^(i-1)の極限が1/(x-1)になる過程を示す。 (2)f(x)=0の解を数値的に求めるアルゴリズム。 プリントにこんだけしか書いてないけど大学のパソコンからじゃないとhpが開けないのですいません。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: GNU C Compiler(独習cにふぞくしてるやつ) [3.3] 言語: C [4] 期限: 明日の五時迄 [5] その他の制限:scanf関数でxとnに入力する形でfor文を使ったものでdouble型でお願いします 。
- 149 名前:148 mailto:sage [2008/11/03(月) 20:48:27 ]
- 一応自分で作ったんですけどコンパイルできなくて何がなんだか・・・
#include <stdio.h> int main (void) { int n, i, f ,x; printf ("xに代入する値を入力してください。\n"); scanf ("%lf",&x); printf ("nに代入する値を入力してください。\n"); scanf ("%ld",&n); for (1=0;i<=n;i++) {x*=(i-1); f+=x;} printf("求める値は %dです。\n",f); return 0; }
- 150 名前:=92 mailto:sage [2008/11/03(月) 20:53:50 ]
- >>147
・x, yはintにする必要がある。(詳細は、forを調べましょう) ・cos(pai/x)としているが、pai/xの部分を考え直しましょう
- 151 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 20:58:37 ]
- >>149
・fが初期化されていない ・1=0ってなに? ・intなのに%lf
- 152 名前:=92 mailto:sage [2008/11/03(月) 20:59:42 ]
- >>149
エラーの出る場所: for (1=0;i<=n;i++) 1=0(定数に定数を代入しています): iと1の打ち間違い
- 153 名前:148 mailto:sage [2008/11/03(月) 21:06:21 ]
- >>151
>>149 double型にするのをわすれてました これを実行すると何を代入しても答えが0になるんですけど どこを直せばいいでしょうか? #include <stdio.h> int main (void) { double n, i, f ,x; f=0; printf ("xに代入する値を入力してください。\n"); scanf ("%lf",&x); printf ("nに代入する値を入力してください。\n"); scanf ("%ld",&n); for (i=0;i<=n;i++) {x*=(i-1); f+=x;} printf("求める値は %dです。\n",f); return 0; }
- 154 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:07:06 ]
- >>149
#include <stdio.h> #include <math.h> int main(void) { int n, i; double x, f = 0.0; printf ("xに代入する値を入力してください。\n"); scanf("%lf", &x); printf ("nに代入する値を入力してください。\n"); scanf("%d", &n); for (i = 1; i <= n; i++) { f += pow(x, i-1); } printf("求める値は %f です。\n", f); return 0; } それと極限は 1/(1-x) な
- 155 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:09:37 ]
- nについて良く見直せ。
- 156 名前:=92 mailto:sage [2008/11/03(月) 21:10:48 ]
- >>149
うは、かぶった><; ついでに、doubleの値がどこかに必要だと思うのだが・・ あと、問題文に、i->nの時の極限と書かないと分からない。
- 157 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:16:07 ]
- [1] 配列:
[2] 問題文: 10個のデータがランダムに格納されている一次元配列を用意して、その中から偶数のみを表示させるプログラムを作る
- 158 名前:148 mailto:sage [2008/11/03(月) 21:17:12 ]
- 直して少し改変したらめちゃくちゃな結果がでました
#include <stdio.h> int main (void) { double n, i, f ,x; f=0; printf ("xに代入する値を入力してください。\n"); scanf ("%lf",&x); printf ("nに代入する値を入力してください。\n"); scanf ("%lf",&n); for (i=0;i<=n;i++) {x*=(i-1); f+=x; printf("n= %d の時、求める値は %d です。\n",i,f); } return 0; }
- 159 名前:=92 mailto:sage [2008/11/03(月) 21:22:14 ]
- >>158
結果表示のfは%d? あと、極限と1/(x-1)の差も表示しないと、どれくらい近づいたかわからない。 ただし、もとのxが保存されていないことに注意。
- 160 名前:=92 mailto:sage [2008/11/03(月) 21:24:56 ]
- 食事してくる。あとはまかせた!
- 161 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:27:03 ]
- >>158
i, n は int でいい。 それにあわせて n の入力時も scanf("%d", &n) それから for 文の中がおかしい。 x のベキ乗を求めるなら f += pow(x, i-1) >>154
- 162 名前:148 mailto:sage [2008/11/03(月) 21:30:56 ]
- >>160
ありがとうございました。 >>161 mathはまだ習ってないのでできればstdioのみでやれるようにしたいのですがどうすればいいのやら・・・
- 163 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:42:19 ]
- >>162
ちゃんと確認してないからミスがあればすまん。 for (i = 1;i < n; i++){ temp = x; for (j = 0;j < i-1; j++) { temp *= x; } f += temp; }
- 164 名前:148 mailto:sage [2008/11/03(月) 22:12:59 ]
- >>163
ありがとうございます。
- 165 名前:=92 mailto:sage [2008/11/03(月) 22:19:32 ]
- >>148
ふと思った事。 lim Σx^(i-1) -> 無限大。収束しない。 極限とか1 / (x-1) とでてきたあたりで、log(x)の微分が1/xとか思い出すのだが・・
- 166 名前:デフォルトの名無しさん [2008/11/03(月) 22:22:02 ]
- この条件分は可能ですか。
if(4<=x<=10)
- 167 名前:=92 mailto:sage [2008/11/03(月) 22:29:15 ]
- >>166
if ((4 <= x) && (x <= 10))
- 168 名前:148 mailto:sage [2008/11/03(月) 22:29:54 ]
- まだ格闘してます
>>165 すいません1/(1-x)でさらに0<x<1って条件付でした
- 169 名前:デフォルトの名無しさん [2008/11/03(月) 22:33:03 ]
- [1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。 範囲は[0, 4π]です。 [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [5] その他の制限:ループと条件分岐、putcharを使う
- 170 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 22:35:28 ]
- >>164
>>163だが x^0のことを忘れてた。 for (i = 1;i < n; i++){ temp = 1; for (j = 0;j < i-1; j++) { temp *= x; } f += temp; }
- 171 名前:112 mailto:sage [2008/11/03(月) 22:38:23 ]
- >>114
ありがとうございます。ただ、どんな原理で動いているのかサッパリなので、 もしよろしければ解説していただけないでしょうか・・・?
- 172 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 22:45:02 ]
- いうまでも無かろう、汎用電子計算機の基本的な仕組み
0と1の組み合わせで、実装されている仕様に応じて 動作しているのさ、フフンッ
- 173 名前:=92 mailto:sage [2008/11/03(月) 22:53:47 ]
- >>112
ヒント。 外ループが回るごとのfの値: f=1 (jは0から-1まで。内ループの実行回数は、0) f=1 + 1*x (jは0から0まで。内ループの実行回数は、1) f=1 + 1*x + 1*x*x (jは0から1まで。内ループの実行回数は、2) f=1 + 1*x + 1*x*x + 1*x*x*x (jは0から2まで。内ループの実行回数は、3) ・・・ f=1 + 1*x + ・・・ + 1*x^(n - 1) (jは0からn-2まで。内ループの実行回数は、n-1)
- 174 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 22:58:42 ]
- 単純に、double型の変数を1バイトごとに分けて
さらに1ビットずつチェキしていると。
- 175 名前:=92 mailto:sage [2008/11/03(月) 23:01:28 ]
- >>112
問題文(1)は、 lim (i = 0 -> n-1) Σx^i = 1/(x-1) に書き直すと分かりやすかったかも。 元が、lim (i = 1 -> n) Σx^(i - 1) になってると、ちょっと混乱w 連投ごめんなさい。
- 176 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 23:06:12 ]
- >>174
double型って、 符号(1bit) | 指数(11bit) | 仮数(52bit) の64ビットで構成される数の事言ってる?
- 177 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 23:11:28 ]
- >>165
ベキ級数ですから、収束条件は |x| < 1 ですしね。どうなんでしょうね。
- 178 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 23:14:45 ]
- >>112くらいのプログラムなら初心者にとっては勉強になるモンなんだろな
規格が出来る前は浮動小数点型が>>176の構成だとは限らなくて 機種依存だったわけだし。 これからも128bit機とかがでたらdoubleの構成が変わるかも?しれん
- 179 名前:クソースでおじゃっ mailto:sage [2008/11/03(月) 23:20:18 ]
- >>112
#include <stdio.h> #define BPB 8 // 1byte / 8bit void hoge(double x) { int i,j; char *p; for(i=sizeof(x)-1,p=(char*)&x; i>=0; i--) { for(j=BPB-1; j>=0; j--) { printf("%d",(p[i]>>j)&1); } printf(" "); } } int main(void) { double a[]={1.0, 0.1, 0.0/0.0, -1.0/0.0, 1.0/0.0, -3.14}; int i; for(i=0; i<sizeof(a)/sizeof(a[0]); i++) { printf("a = %lf \n",a[i]); hoge(a[i]); puts(""); } return 0; }
- 180 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 23:20:21 ]
- double のデータ構造がどうこうよりビット操作やビットマスクの
勉強としての意義のほうが大きいと思う。
- 181 名前:デフォルトの名無しさん [2008/11/04(火) 00:14:43 ]
- [1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。 範囲は[0, 4π]です。 [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] できるだけ早く [5] その他の制限:ループと条件分岐、putcharを使う よろしくお願いします。
- 182 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 00:19:07 ]
- >>146
う〜〜〜ん・・・・伝わらないよ>< 205×5−1で1024個になるって意味なんですけど。。。 つまり205行5列で1024個ってことなんですけど。 どうでしょうか? 伝われば幸いです。 malloc
|

|