562 :
デフォルトの名無しさん :
2012/11/06(火) 01:51:04.06 以下のような行列の積を求めるプログラムを作成して下さい 行列xを表示 1 2 3 4 5 6 行列yを表示 1 2 4 3 6 9 行列xとyの積を表示 ^^^^^^^^^^^^^^^^^^^^^^^ 行列xとyの積を表示の下には計算結果を表示するようなプログラムを教えて下さい お願いします
MatProduct(int M, int N, double A[M][N],double B[N][M],double C[M][M]){ int m,n,k; for(n=0;n<M;n++)for(m=0;m<M;m++)C[m][n]=0; for(n=0;n<M;n++)for(m=0;m<M;m++)for(k=0;k<N;k++)C[m][n]+=A[m][k]*B[k][n]; }
>>563 >for(n=0;n<M;n++)for(m=0;m<M;m++)C[m][n]=0;
いるのか?
いらないと思ったのか?
いらねーだろふつーに
いらねーって言ってる奴は学校行ったの?
569 :
デフォルトの名無しさん :2012/11/06(火) 08:56:43.10
570 :
デフォルトの名無しさん :2012/11/06(火) 08:58:11.47
572 :
デフォルトの名無しさん :2012/11/06(火) 09:03:56.92
どこですか
changeとか語彙力ねーな
課題で「自作の関数(main)以外)を少なくとも一つ実装して使用せよ」という条件が出されたんですが、次レスようなプログラムで条件を満たしていますか? ちなみに課題はx要素の二乗和を求める課題で、元となった参考プログラムにsum(void)はありませんでした。
#include<stdio.h> #include<math.h> double x2sum(double *x, int n){ int i; double sum = 0.0; for(i=0; i<n; i++) {sum = sum + x[i]*x[i];} return sum; } int sum(void); int main (void){ sum(); return 0; } int sum(void){ int i,n; double X[1000],x2norm; scanf("%d",&n); for(i=0; i<n; i++){ scanf("%lf", &X[i]); } printf("xの要素の二乗和は%lf\n", x2sum(X, n)); x2norm = sqrt(x2sum(X,n)); printf("xをベクトルと考えた時の長さは%lf\n",x2norm); return 0; }
> for(i=0; i<n; i++) {sum = sum + x[i]*x[i];} ここは for(i=0; i<n; i++) sum += x[i]*x[i]; で良い sum() の戻り値を使っていないのに定義するのは無駄 main() で何もしないのなら main() に sum() の内容を書いた方が良いと個人的には思う scanf() は禁止 入力後 n の上限(1000)をチェックするべき x2sum(X, n) を二回呼んでいるので効率悪い
>>577 ありがとうございます
>main() で何もしないのなら main() に sum() の内容を書いた方が良いと個人的には思う
それだとmain関数以外の関数を少なくとも一つ実装せよという条件に反しませんか?
できればこの条件の満たし方(?)を教えてほしいです
ちなみに正式な課題内容は「要素数(n)と、n個の数を入力し、その要素の二乗和と、平方根を求めよ」です
double x2sum(double *x, int n){ これは関数じゃないの
>>578 IOをMainで、主計算を函数でやればいいやん
582 :
デフォルトの名無しさん :2012/11/06(火) 15:22:07.07
>>582 l.27 題意より成績
l.29 引数が多いときtrueになる?
l.40-42,61,62 fgetsの返り値を活用
l.50-57 姓名の配列が固定長ならサイズチェック
l.58,59 atoi2回呼ぶのとaveにtokutenを加算するのはどっちが得?
586 :
デフォルトの名無しさん :2012/11/06(火) 17:17:50.06
PGM STRT LD GR5,DD LAD GR1,3 LD GR6,DD,GR1 ADDA GR5,GR6 ST GR5,EE RET DD DC 5,6,7,8 EE DS 1 END レジスタGR5の値(10進数) レジスタGR1の値(10進数) レジスタGR6の値(10進数 レジスタGR5の値(10進数) を教えてください。
今更の話だけど、10文字以内の以内についてはどう解釈すれば よいのだろうか。名字の末尾に空白が来たら、次の空白以外の 文字から名前が始まるということか。
>>584 添削して欲しいコードが問題文に副ってないんだが
>>587 >>547 がdata-1.datをうpしない限りなんともいえないんじゃね
それ故に入力ファイルを
>>561 はスペース、タブ、改行をデリミタとするDelimiter-Separated Valueとして
>>582 は簡易版CSVとして想定してるし
592 :
587 :2012/11/06(火) 20:18:34.58
>>591 そうですね。ただ一連のフォーマット部分を見てたら、もしかしたら
最初の項目は固定長のつもりなのかって思えちゃって。
どうせ書いたって見ないでしょ。
>>582 ,583
もっとあるっしょ
・St_MAXみたいな意味の分かりにくい変数名をつけない
・argc==1とその次のエラー文の内容に齟齬がある
・ファイルのオープンに失敗した時のエラー表示がおかしい
・strはM_LENGTHで確保してるけど50しか使わないのは何故
・1行が50バイト以上だとwordの中身が入ってなくて不正アクセスで落ちないか?
・学生が100人超えるとバッファオーバーランで死なないか?
・do-whileじゃなくてwhileにしたらeofの判定1回で済むし、空行を強制する必要がないと思うけど
・strlenしてループ回してるのはstrncpyの劣化か?
・指摘すみだけど、名前が10バイト超えたら死ぬ
・学生の人数が0だったら平均の計算で死ぬよね
・最後の出力は桁決まってるしMとかの方がいんでない?
wrがfbs
>>596 ありがとうございます。
本当に助かりました。
599 :
582 :2012/11/06(火) 22:45:12.23
>>595 ありがとうございます
C言語の例外処理は本当に多様で、気をつけるのが難しいです。だいぶまともなコードになりました
>>595 >・最後の出力は桁決まってるしMとかの方がいんでない?
どゆこと?
>>587 全体が固定長で、名字、名前だけ後部は空白で埋められていると解釈するのが
一番自然なんだろうけど。Cの場合あまりそういう解釈を取らない。
603 :
デフォルトの名無しさん :2012/11/07(水) 21:42:08.80
[1]C/C++プログラミング実習
[2]問題
http://codepad.org/IbHwR87p [3]visual studio 2010
[4]11月12日 10時
[5]ファイルを読み取って書き換えてtxtファイルに出力するというものですが
私には難しすぎてわかません。どなたか助けてくれれば幸いです。
>>603 >ファイル名を削除し右から順に番号を振った上で要素が0のものを削除し書き換え
>caltech10/accordion-0001.jpg 1 0 2 0 1 0...
>1:1 3:2 5:1…
>caltech10/accordion-0002.jpg 1 2 7 0 0 3...
>1:1 2:2 3:7 6:3…
左からに見えるんだけど・・
/* あるtxtファイルにファイル名とランダムな数字で書かれた多数の数列がある。 例 caltech10/accordion-0001.jpg 1 0 2 0 1 0... caltech10/accordion-0002.jpg 1 2 7 0 0 3... caltech10/accordion-0003.jpg 0 0 2 199 0 3... caltech10/accordion-0004.jpg 0 0 0 0 5 1... ・ ・ このtxtファイルを読み取って ファイル名を削除し右から順に番号を振った上で要素が0のものを削除し書き換え txtファイルに出力するプログラムを作れ。 実行例 1:1 3:2 5:1… 1:1 2:2 3:7 6:3… 3:2 4:199 6:3.... 5:5 … 必ず 番号:数値?番号:数値?番号:数値?… という形にすること */
606 :
603 :2012/11/07(水) 21:56:41.37
>>604 さん
すいません左と右を間違えてました。。。
>>603 の問題を訂正しておきました。申し訳ございません。
607 :
603 :2012/11/07(水) 21:58:46.05
608 :
デフォルトの名無しさん :2012/11/07(水) 22:43:43.96
古いC++本のサンプルプログラムなんですが、 #include <stdio.h> int main() { int x; printf("%d\n", x); /* xの値は不明*/ printf("%d\n", x=4); /*代入式 x = 4の値を表示:*/ printf("%d\n", x); /* x に4が代入されたかを確認*/ x = 6; /*xに別の値を代入*/ printf("%d\n", x); /* xに6が代入されたかを確認*/ x = x + 4; /*x の値を 4 大きくする*/ printf("%d\n", x); /*それを確認*/ return 0; } をVisualStudio2010で実行すると、必ず 4行目 x; のところでコンパイルエラーになります。 本の通り書いてるのですが、本当なら、表示が 750 4 4 6 10 と、なるそうなんですが、何がおかしいのでしょうか? 教えて下さい。
それは宿題ですか?
&x
初期化されていないローカル変数って、VisualStudio2010ではコンパイルエラー扱いなの?
613 :
デフォルトの名無しさん :2012/11/07(水) 23:39:01.79
あーすいません、スレ間違ってましたか・・・ 向こうで聞いてみますね。ありでした。 ちなみに、初期化されてないローカル変数はエラーになるようです・・・
616 :
初心者VC++スレの666 :2012/11/08(木) 21:09:13.51
初心者にVC++を教えるスレから誘導されてきました。 問題文はないし、学生じゃないので授業単元はないですが、 先輩にやっとくようにいわれた宿題の一部なのでこちらで質問させてください。 忍者帖の文字数制限にかかるので、次のレスで質問します。
617 :
初心者VC++スレの666 :2012/11/08(木) 21:12:16.94
環境:Windows XP(32bit)、VC++ 2005 ある与えられた文字列をバイナリに変換して16バイトのバイト配列に入れる 与えられる文字列は、バイナリ変換した時に128bitまでに収まる数値の文字列とする という問題で困ってます 例: "1234" →1234(4D2h) →00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,04h,D2h で、QWORD以上は整数値にできずに困っています。 "18446744073709551616" →10000000000000000h →00h,00h,00h,00h,00h,00h,00h,01h,00h,00h,00h,00h,00h,00h,00h,00h, どのように処理すればいいのでしょうか?
>>617 >通信仕様を渡されてやっといて
ネットワークプログラミングならここでもそう書けよ
620 :
603 :2012/11/09(金) 18:05:08.89
>>614 お礼が遅れて申し訳ございません。。。ありがとうございます!!
621 :
デフォルトの名無しさん :2012/11/09(金) 18:23:30.61
[1]プログラミング実習
[2]問題
http://codepad.org/pFx4NTTb [3]visualStudio 2010
[4]11月15日 10時
[5]フォルダの中にあるファイルの名前を書き換えて他のフォルダに移す
という問題です。どなたかお願いします。
>>621 要件が曖昧かつ不足
1. 並び順
gazou\A\img-2.jpg
gazou\A\img-01.jpg
とあったときに、
gazou\A\img-2.jpg → gazou2\A-0001.jpg
gazou\A\img-01.jpg → gazou2\A-0002.jpg
とすべきなのか
gazou\A\img-01.jpg → gazou2\A-0001.jpg
gazou\A\img-2.jpg → gazou2\A-0002.jpg
また、「_」の扱いも、ファイルマネージャー(ExplorerやNautilusやThunar)ごとに異なる。
Cのstrcmp()やstricmp()でも並び順が変わるし、DOSのsortコマンドも異なる。
2. 画像ファイルが10000個以上ある時、10000個目は
gazou2\A-10000.jpg
で良いのか
など。
>>622 間違った
×
> 1. 並び順
> gazou\A\img-2.jpg
> gazou\A\img-01.jpg
> とあったときに、
> gazou\A\img-2.jpg → gazou2\A-0001.jpg
> gazou\A\img-01.jpg → gazou2\A-0002.jpg
> とすべきなのか
> gazou\A\img-01.jpg → gazou2\A-0001.jpg
> gazou\A\img-2.jpg → gazou2\A-0002.jpg
○
> 1. 並び順
> gazou\A\img-10.jpg
> gazou\A\img-2.jpg
> とあったときに、
> gazou\A\img-10.jpg → gazou2\A-0001.jpg
> gazou\A\img-2.jpg → gazou2\A-0002.jpg
> とすべきなのか
> gazou\A\img-2.jpg → gazou2\A-0001.jpg
> gazou\A\img-10.jpg → gazou2\A-0002.jpg
>>622 そもそも元ファイル名がどうなっているって言う指定がないんだから
FindNextFileで出てくるのを連番にすればいいだけだろ
5桁以上はその都度桁増やせばいいんじゃね、そんなに突っ込んだらパフォーマンス落ちるけどな
gazouフォルダ内に既に A-00nn.jpg ってファイルがあったらその番号は保存するの?付け替えても平気?
626 :
621 :2012/11/09(金) 22:27:12.65
>>623 >>624 >>625 さん
レスありがとうございます、そして説明不足で申し訳ございません。
>>624 さんの言うとおり、元ファイル名に指定はないので
あああ.jpgとか165287.jpgといった適当に名前の付けられた画像ばかりが入ってるという条件です。
なのでファイル名を並び順関係なしに連番でつけてください。
画像内部に既にA-00nn.jpgがあったとしても番号は保存なしに付け替えても大丈夫です。
また10000個目があったとしたら桁数を増やすという対処でお願いします。
もしかしたらこれでも説明不足かもしれません。そしたらまたツッコミをお願いします。。
>>616 ,617
ベタで書いてみたがリンク貼れないので加工。
http : //ideone.com/qHzVns
[1] c言語 [2] 問題文:C言語でのポインタを使った行列の操作です。 1 2 3 0 0 0 0 1 2 0 0 2 0 0 0 1 をファイルから読み込み,以下の操作を実行せよ。 1,非零の要素を左から右へ、上から下へ書きならべた配列を作り、 [1 2 3 1 2 2 1]とする。 2,各要素が何行目・何列目にあるかを別の配列に格納し、 A = [1 2 3 1 2 2 1] 非零要素リスト IA = [1 1 1 2 3 3 4] i行 JA = [1 2 3 4 1 4 4] j列 の配列が出力されるようにせよ。 3,何番目の要素からiが始まるかを書きならべる。 IAの中で、1が初めに出現するのは1番目、2が初めに出現するのは4番目、3が初めに出現するのは5番目、4が初めに出現するのは7番目なので、 IA' = [1 4 5 7] の配列が出力されるようにせよ [3] 環境:Ubuntu11.00 よろしくお願いします
>>628 入力が
1 2 3 0
0 0 0 1
0 0 0 0
0 0 0 1
だった場合 IA = [1 1 1 2 4]となって 3 が出現しないんだけど、
IA'はどう表現すればいいのだろう。
入力は
1 2 3 0
0 0 0 1
2 0 0 2
0 0 0 1
意外考えなくて良いのかな。
入力を固定値しか考えなくていいのなら 固定値をpsintfすれば?
>>628 #include <stdio.h>
#define I_SIZE 4
#define J_SIZE 4
int main(void){
int matrix[I_SIZE][J_SIZE]={{1,2,3,0},{0,0,0,1},{2,0,0,2},{0,0,0,1}};
int A[I_SIZE*J_SIZE], IA[I_SIZE*J_SIZE], JA[I_SIZE*J_SIZE], IA_[I_SIZE]={0};
int *pA=A, *pIA=IA, *pJA=JA, i, j, c;
for(i=0,c=0;i<I_SIZE;i++){
for(j=0;j<J_SIZE;j++){
if(matrix[i][j]){
*pA++=matrix[i][j];
*pIA++=i+1;
*pJA++=j+1;
c++;
}
}
}
for(i=0;i<c;i++) if(IA_[IA[i]-1]==0) IA_[IA[i]-1]=i+1;
printf("\nA ="); for(i=0;i<c;i++) printf(" %d", A[i]);
printf("\nIA="); for(i=0;i<c;i++) printf(" %d", IA[i]);
printf("\nJA="); for(i=0;i<c;i++) printf(" %d", JA[i]);
printf("\nIA'="); for(i=0;i<I_SIZE;i++) printf(" %d", IA_[i]);
return 0;
}
632 :
デフォルトの名無しさん :2012/11/10(土) 23:46:23.31
>>629 >>631 ファイルから
1 2 3 0
0 0 0 1
0 0 0 0
0 0 0 1
という数値を入力したいのですがどのような方法があるでしょうか?
>>628 ,633
http : //ideone.com/Q6qfkE
>>632 ファイルの操作(名前変更とか移動とか)がからむから、
WindowsなのかLinuxなのか、処理系を明示した方が
良いと思いますよ。
637 :
636 :2012/11/11(日) 12:32:55.38
>>621 に書いてあったorz
(私は作れないのでごめんなさい)
638 :
デフォルトの名無しさん :2012/11/11(日) 12:52:40.23
>>637 たしかにvisual studioはlinaxで動くのもあるらしいですしもう少し定義しなきゃダメでしたね・・
忠告ありがとうございます。
それを踏まえて
>>621 の問題を改変したものをもう一回かいておこうと思います。
度々申し訳ございません。
[1]プログラミング実習
[2]問題
http://codepad.org/jgm76WsV [3]visualStudio 2010
[4]11月15日 10時
[5]先生に指摘があった点を言った所、枚数の方は100枚以下という条件になりました。
フォルダに100枚以下の画像を名前や順番関係なしに「フォルダ名ー番号」
という名前に書き換えて違うフォルダに移すという問題です。
どうかよろしくお願いします。
>>638 対象:windows、jpg決め打ち
http://ideone.com/paE2Ii 10分くらいで書けるかと思ってたけど意外とめんどかった。
windows.hとかファイル操作するときはideoneのrunを外さないとダメなんですね。
サイト上でエラーでまくっていますが、ローカルだと動くと思います。
>>639 #define MAXPATH 256 // ← windows.hで定義されている_MAX_PATHを使うべし
UNICODEでしか作れないファイルがあると動かないコードだね
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): ファイル処理 1、ファイルの中身を表示 2、漢字の読みを入力を促す。 3、入力後Enterで再びファイルの中身を表示させる。 4、入力した読みも追記されている状態にする。 ファイル内容は 春夏秋冬 です。 読みを入力してください。 しゅんかしゅうとう ファイル内容は 春夏秋冬 しゅんかしゅうとう です。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名:gcc [3.3] 言語:C [4] 期限: 早めにお願いします。
(夕方)このPGやっといて。期限?まぁ早めにやってくれればいいよ。 (終電前)あれ終わった?はぁ!?とっかかりだけ!?早めにって言っただろ!!! という上司に当たると困るよね。 軽い依頼に油断して具体値を確認しない糞社畜もダメなんだけどね。はい、私です。
645 :
638 :2012/11/11(日) 20:17:42.15
>>639 >>640 ありがとうございます、無事コンパイルもできて動きました!
本当に助かりました。。ありがとうございます・・・!
もし次に依頼する時がある時はちゃんと詳細をかいてから投稿することにします
その点については本当に申し訳ございませんでした。
>>644 期日だけは最初に必ず聞いて
無理なら無理って言わないと全て自分のせいになっちゃうよね
647 :
643 :2012/11/11(日) 23:06:48.18
>>644 >>646 643です。
お願いしている身なのにも関わらず不愉快な思いをさせてしまいすみませんでした。
明後日の火曜日までです。
どなたかお願いします。
648 :
デフォルトの名無しさん :2012/11/12(月) 00:02:45.11
649 :
デフォルトの名無しさん :2012/11/12(月) 00:19:35.51
strtokなんてめったに使わないものを持ち出してくるとは
654 :
653 :2012/11/12(月) 01:09:59.20
>>649 あ、9番だけね
14番は問題の意図がよくわからんかった
656 :
デフォルトの名無しさん :2012/11/12(月) 01:19:20.93
>>651 strtok以外で、CSVのようなフォーマットの外部ファイルを読み込んで、
それぞれのデータを分けるやり方ってあるのでしょうか。
>>652 ありがとうございます。こうすれば良いのですね。
形式が決まってるんだったら fscanf(hoge,"%d,%[^,],%[^,],%d",&h・・・ みたいにfscanf(もしくはfgetsとsscanf)で十分でしょう
659 :
デフォルトの名無しさん :2012/11/12(月) 01:49:27.10
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): ファイル処理 文字列を複数入力した上で、その順番に表示するプログラムを作る。また、その応用で逆に表示するものも作る。 1、文字列はいくらでも入力できる。 2、連結リストにデータを保持する。 3、入力を終わらせる手段を用意する [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名:gcc [3.3] 言語:C [4] 期限: 11月12日 10:00 頑張っていたのですが、ちょっと厳しいです。よろしくお願いします。時間ないですけど…。
662 :
デフォルトの名無しさん :2012/11/12(月) 08:27:23.37
>>660 ありがとうございます!
ただ、c言語初心者で現在構造体を学んでいる段階の私にはよく分らない所だらけで…。
入力した文字列(名前など)を逆順に表示するだけにするにはどうすればいいですか?
私としては、構造体の宣言→入力受付→それに応じた領域の確保→入力された文字列(名前など)逆順に表示の流れで考えているのですが…。
http://codepad.org/ucTCDxtR char data[];
はC99で認めらているけど、が気になるなら
char data[0];
にしとけ、[0]はGCCの拡張機能。
但し、以下の利用条件を守る場合に限り利用を許可する。
次回からの質問では「Qzは回答禁止」と書くこと。
[1] 配列ポインタ [2] n件の浮動小数点型データを配列に入力して、その最大値を出力するプログラムを作成。 ただし、配列の定義以外で添字演数子[ ]を用いないまた、*(p+i)、*p++の形式2つを用いた場合をそれぞれ作成。また、入出力処理をファイル処理に変更して、入出力ファイル名はコマンドラインで指定する。 [3]Linux、gcc、C [4] 至急 [5] 緊急で無理とは思いますがお願いします
667 :
デフォルトの名無しさん :2012/11/12(月) 11:10:12.30
662です。fputsとstrcpyの部分でエラーが出てしまいます。何か他の表現方法とかはありますか?
>>668 テメーが完璧にfreeしてから言え。SIGKILL食らった場合でもfreeしろよ。カス。
自演乙
>>664 >>665 分けちゃったの?一つのプログラムで書きたいよね
>>665 >struct data_list data_list = {0},
ふーん、正順のときは頭の一個は空っぽなんだ、これじゃ一つにまとめられないよね
>for (p = &data_list; p->next != NULL; p = p->next)
> ;
Ο(n)なの?後ろまでいちいち手繰るの?一発で到達できないの?
>>670 free() が一つもない、というのは教育的じゃないよね、C は malloc()/new しまくる言語じゃないんだけど
あと可変長構造体はリッチーはすごく嫌っていたみたい
http://www.kouno.jp/home/c_faq/c2.html#6 >ただしDennis Ritchieは「Cの実装への根拠 のない馴れ馴れしさ」と呼んだ。
C99 では公認されたにしてもちょっとねえ、妙なところは技巧的にいくんだ?
お前はSIGKILL喰らってもきっちりfreeできるテクを開発するまでmalloc使用禁止な。
>>673 SIGKILL はシグナルハンドラを設定できないシグナルだったかと。
>>664 >>665 free() できるけどしない、のか、free() のしかたをしらないのか、区別つかない
また自演
黙れ朝鮮人
散々バカにされて悔しいから、どうでもいいところに噛み付くキチガイがいるw
平静を装うキチガイ絵便器族がいるね↑
>>680 終了するだけなのにfreeしろっていうのは池沼の証明だから必要ない。
SIGKILL喰らった時に「mallocしたブロックはfreeすべし」というマヌケな
ポリシーが貫けなくなるので、mallocは使えないことになりましたとさ。
OSが後始末してくれるような環境だったら良いんだけどね。
プログラム終了とともに解放されることが確実な領域をfree()するかどうかは趣味の問題でしかないのに、 そんなどうでもいいところに噛み付かなきゃプライドが保てないQZが哀れすぎるw
おいおいおいおい糞喰い民族ファビョるな
死ねや自演野郎
なんとなく、エラー処理で終了するときにexit終了だとmalloc解放とかその他諸々キレイにしてくれるけど、 return終了だとファイル解放くらいしかしてくれないと思ってたんだけど、 外部割込みで強制終了とかじゃなくて普通に終了したら、 exitだろうがreturnだろうがvoid mainの終了だろうが関係なく全部解放してくれてるの? ちなみにそれはOSに依存するの?vcやgccとか言語に依存するの?
関数の中だけで使うため生成した領域やファイルポインタやハンドル類は、 その関数が終わる時に解放するのがこのスレとしては模範的なんじゃないかな。
自分のやりたいようにやればいい
freeとは何か? 不要になったメモリブロックをメモリアロケータに返却し、 再利用可能にするための仕組みだ。 プログラムの終了で再利用の可能性は消滅するのだから、終了直前にfree するのは池沼のやる事。
>>690 頭悪いのが頑張るとひどいことになるんだな
>>683 そういう環境の場合に終了前に呼び出すべきクリーンナップルーチンはfreeではない。
OSがmalloc/freeレベルの細粒度のブロックを管理する事は無い。
終了直前にfreeするのは池沼のやる事。
693 :
デフォルトの名無しさん :2012/11/13(火) 02:09:37.74
>>680 残念。それはうまくいかない。
>for (p = data_list.next; p; p = p->next)
> free(p);
free(p); → p = p->next → p != 0?
free(p) したあとでは、p->next の値を利用できない。
>>682 SIGKILLにシグナルハンドラを設定できるのならば簡単なんですけれども
>>684 free() 以外にも
>>672 にいろいろあげておきました。
>>687 別に解放しなくても OS がまとめて面倒みてくれると思います。 MS-DOS の時代ですらそうでしたし。
free() するしないは宗教問題でしょうね。free() を使えることが前提ではありますが。
>>684 >プログラム終了とともに解放されることが確実な領域をfree()するかどうかは趣味の問題でしかないのに、
そのとおり。ただしfree() をちゃんと使えることが前提ではありますが。
ちゃんとしたプログラムがろくに書けないアホが、なんで他人がfree()使えないとか思えるんだよw
>>683 free() ならいいのだけれども
globalalloc() とか、私がよくやる
HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
だったらglobalfree() とか HeapFree(GetProcessHeap(), 0, p); とかしないと、やっぱりまずいのでしょうか?
>>697 free() を使わないと、いろいろと理屈をこねないといけないので死ぬほど面倒くさいことがよくわかりました。
さっさとfree() 書いときますね。
>>695 >
>>680 > 残念。それはうまくいかない。
> >for (p = data_list.next; p; p = p->next)
> > free(p);
> free(p); → p = p->next → p != 0?
> free(p) したあとでは、p->next の値を利用できない。
あ、そうですね。p->nextの領域が解放されて消滅した後に
参照しても正当な値が得られる保証はありませんね。
うかつでした。ありがとうございます。正しくは、
char *pp;
…
for (p = data_list.next; p; ) {
pp = p->next;
free(p);
p = pp;
}
ですね。
702 :
701 :2012/11/13(火) 05:49:21.56
>>701 > char *pp;
> …
struct data_list data_list * pp;
の間違いでした
>>702 struct data_list *pp;
>>695 > SIGKILLにシグナルハンドラを設定できるのならば簡単なんですけれども
ふむ、それなら捕捉可能なシグナルにたいしてきっちりfreeしろよ。
まずは
>>663 を修正してみろ。
707 :
693 :2012/11/13(火) 12:57:24.15
>>693 まさかここまで早くやってくれるとは思いませんでした。ありがとうございます!
自分で自分にお礼
709 :
680 :2012/11/13(火) 17:18:32.82
>>709 >p->next = malloc(sizeof(data_list) + l + 1);
>if (p->next == NULL) {
>.........
>goto PG_END;
>}
すばらしい。malloc() に失敗してまでもfree() しようとするところ、free()信者の鑑といえよう。
異常系はよくわからんからやる気のない私は似非信者。
freeしないとまずい処理系が存在しないんだったら良いんだけど、 現在動いている組み込み系とかCP/Mとかって、全て、本当に、大丈夫なの?
>>695 > SIGKILLにシグナルハンドラを設定できるのならば簡単なんですけれども
簡単って豪語したんだから、捕捉できるシグナルをきっちりfreeしろよ。
>>711 お前バカだろ。大丈夫じゃないmallocを作れば大丈夫じゃない。
つまり、mainだろうが動的確保したものは開放しろよ、 ってことでFA?
解放
違う。再利用する可能性が無いのに解放するのは池沼のやる事。
ハイレベル
>>718 (解放した後の空きメモリを)再利用する可能性が無いのに解放するのは〜〜
ということでしょ。
だとすると、解放した後の空きメモリを再利用する可能性があるなら解放する。
もはや言葉遊びだな。
でも、組み込みARMのCで、そんな実装があったような。
複数モジュールがあって、それぞれmain()を持ち、適宜呼び出される。
各々main()の中で動的確保されたメモリは、main()抜けるまでに解放すること。
>>718 意味ないし、不可能だし(SIGKILL)、不可能なの除外して(SIGKILL以外)も困難だし。
簡単とか豪語したクズもやっぱりできてないし。
[1] 授業単元:C言語 アルゴリズム
[2] 問題文 行列ベクトル積
http://ideone.com/21ECGq [3] 環境
[3.1] OS:ubuntu11.00
[3.2] gcc
[3.3] 言語: C
以前質問させて頂いたものを参考に作成しました。ファイルから数値をを取り込んで行列ベクトル積を計算したいのですがうまく数値が変動しません。アドバイスよろしくお願いします
>>722 まず、
・190行目の
ksl b[i] = 0;
は何でしょうか?
コンパイルが通るソースを上げましょう。
・void dot_crs_cpu(double *b, double *x, double *val, int *col_ind, int *row_ptr);
ですが、引数に n を渡す必要があるのでは。
void dot_crs_cpu(int n, double *b, double *x, double *val, int *col_ind, int *row_ptr);
として、153行目は
dot_crs_cpu(n, vector_b,vector_x,val,col_ind,row_ptr);
724 :
723 :2012/11/14(水) 01:43:55.43
>>723 まだ全然処理を見ていないので、dot_crs_cpuに渡すのが
mainのnかどうかは分からないけど、とりあえず…
>[1] 授業単元:C言語 アルゴリズム
>[2] 問題文 行列ベクトル積
>
http://ideone.com/21ECGq >[3] 環境
>[3.1] OS:ubuntu11.00
>[3.2] gcc
>[3.3] 言語: C
>以前質問させて頂いたものを参考に作成しました。ファイルから数値をを取り込んで行列ベクトル積を計算したいのですがうまく数値が変動しません。アドバイスよろしく
お願いします
>>722 ですが再掲です。
>>723 さんのアドバイスと入力するテストデータを追記してみました。
よろしくお願いします
>>725 >
>>722 ですが再掲です。
>>723 さんのアドバイスと入力するテストデータを追記してみました。
722と同じurlになってるよ。
新しい方のurlを貼られたし。
>>722 宣言
void dot_crs_cpu(double *b, double *val, double *x, int *row_ind, int *col_ind);
定義
void dot_crs_cpu(double *b, double *x, double *val, int *col_ind, int *row_ptr)
ズレている。
>>728 188行のnはいらないだろう?
というか、コンパイルが通るの確認してからうpすべし。
あと、
>>727 の書いてあるとおり、プロトタイプと実体の変数の並び順が合っていない。
俺は寝る。
>>722 >>728 は、
matrix_a(5行5列) 〜
{1.000000 1.000000 1.000000 1.000000 1.000000
1.000000 3.000000 3.000000 3.000000 3.000000
1.000000 3.000000 5.000000 5.000000 5.000000
1.000000 3.000000 5.000000 7.000000 7.000000
1.000000 3.000000 5.000000 7.000000 9.000000 }
vector_b(5行1列) 〜
{5.000000 13.000000 19.000000 23.000000 25.000000 }
で、単に
vector_x = matrix_a * vector_b
のvector_xを求めたいのかな?
それにしてはCRSとかの処理らしきものが入っているし、、
違ったらすみません。
732 :
731 :2012/11/14(水) 03:20:04.16
表現訂正 vector_b(5行1列) 〜 {5.000000 13.000000 19.000000 23.000000 25.000000 }
>>720 お話興味深いです。
まあ、
>>668 はfree()信者が釣られてしまったということでよいかと
質問です。 double test; test=195/4; printf("%10.2f",test); を実行すると48.00になるのですが double test; test=195.0/4; printf("%10.2f",test); だと、48.75になります。 なぜでしょうか?後者の方が正しいと思うんですが。
>>731 CRS形式の行列ベクトル積を実装しようとしています。
b=AxにのA、xに適当な数値を与え、bに結果を格納し、行列ベクトル積が正しく動作しているか確認するつもりですソースを書きました。
195/4 整数と整数の割り算なので割った結果を切り捨てて整数化された 48 が式の値 そのあと浮動小数点数の変数に代入するので test は 48.00 となる
> SIGINT, SIGQUIT, SIGTERM, SIGTSTP にのみ対応、ほかのは対応しても意味ないし。 再利用の可能性が無いのにfreeする事を要求しているお前の宗教の経典では意味あるだろ。 SIGKILLでfree出来ない時点で欠陥経典なわけだが。
最近 atexit() というものを覚えました これで完璧です
再帰分割を利用した迷路作成のプログラムを作っているのですが、うまくいかないので、アドバイスお願いします。 課題としては、壁を#、道をスペースで表示するといったものです。 [1] 授業単元: [2] 問題文(含コード&リンク): RecursiveDivisionMethodを使用しての迷路作成。(英語ですいません。。。) en.wikipedia.org/wiki/Maze_generation_algorithm#Recursive_division_method [3] 環境 [3.1] OS:Mac OSX 10.8.2 [3.2] gcc [3.3] C [4] 期限: 2012/11/16まで 現時点でのソースコード codepad.org/lMzvP9Il はじめの壁二つと壁の穴開けまでは特に問題なくできたんですが、そこから再帰を使って壁と穴を 作っていくところで手詰まり状態です。 後、直接は関係ありませんが、40~42行目のif文でelseを削除するとFloating point exceptionが出てしまいます。 これも何故だかよくわかりません。 よろしくお願いします。(リンク貼るとエラーが出るので、URLのhttp~~は省略しています。)
ああ 途中で center 壊してるな 直さなきゃ・・・
>>742 recursiveDevide()呼び出すたびにsetPoint()でpointxとpointyが変化してまずいのでは。
pointxとpointyはグローバルではなく、
recursiveDevide()のIN引数(入力パラメータ)、
setPoint()のOUT引数(結果入れ先)
として与えた方が良いかも。
あと細かいけど
・#include<time.h>
・127行目
>if( x == 0 | x == SizeX-1) {
↓
>if( x == 0 || x == SizeX-1) {
>> 745
>recursiveDevide()呼び出すたびにsetPoint()でpointxとpointyが変化してまずいのでは。
コメントありがとうございます。そこには気づいていたんですけど、それを回避しようととして40-42行目のif文をいれて小細工しようとすると
前述したようにエラーが起きてしまう・・・といった感じでした。
>pointxとpointyはグローバルではなく、
これはたとえば
void setPoint( int refx, int refy, int maxx, int maxy, int *pointx, int *pointy) {*pointx = rand()%(maxx-refx) + refx;
*pointy = rand()%(maxy-refy) + refy;
}
void recursiveDevide( int refx, int refy, int sizex, int sizey) {
setPoint( refx, refy, sizex, sizey, &pointx, &pointy);
}
といった感じのことでしょうか。
>>743 ありがとうございます。試してみます。
と、思ったらこれC++ですねw
>>746 WIDTHかHEIGHTのどちらかが偶数のとき、
まずくないかな?
>>747 >
>>743 > ありがとうございます。試してみます。
> と、思ったらこれC++ですねw
#include以外はCだよ
>>748 道幅が変化する場合の動作は未定義ですので
コメントで禁止(運用でカバー)しています
751 :
748 :2012/11/15(木) 09:34:30.71
752 :
745 :2012/11/15(木) 09:55:51.76
>>747 > これはたとえば
> void setPoint( int refx, int refy, int maxx, int maxy, int *pointx, int *pointy) {*pointx = rand()%(maxx-refx) + refx;
> *pointy = rand()%(maxy-refy) + refy;
> }
そうです。そして、
void recursiveDevide( int refx, int refy, int sizex, int sizey) {
int pointx, pointy;
setPoint( refx, refy, sizex, sizey, &pointx, &pointy);
…
recursiveDevide( refx, refy, pointx, pointy) ;
recursiveDevide( refx, pointy, pointx, maxy) ;
recursiveDevide( pointx, refy, maxx, pointy) ;
recursiveDevide( pointx, pointy, maxx, maxy) ;
}
といった感じのことです。
main()でのsetPoint()はいらなくなるかな。
>>745 で
> recursiveDevide()のIN引数(入力パラメータ)、
と書いたけど、これは無駄でしたね。
何か勘違いして混乱させていらた、すみません。
>>748 >>750 今回のはたぶん必ずループ脱出できるみたいだから良いけど、
do{}while()でrandomで期待する値が出るまで待つのは、
あまり良い方法じゃないと思うよ。
偶数か奇数かしか要求しないのなら、
RandInt()をもう少し改良して、
指定範囲内の偶数または奇数のみ
生成して返すようにした方が良い。
[1] プログラミング [2] 1+2+3+....+nが1000になる直前の変数nの値を求めよ [3] 環境 [2.1] Windows [2.2] C++ [4] 期限: ([2012年11月17日12:00まで] [5] その他の制限:9月から講義でC言語を扱っているため初歩的な知識しか ならっていません。printf scanf switch文 if else if for文 何かアドバイスをいただけると助かります。 よろしくお願いします。
1000にはならないので1000以上になる直前ってことで #include <stdio.h> int main() { int sum=0,n; for(n=1;(sum+=n)<1000&&n++;); printf("n=%d\n", n); return 0; }
757 :
756 :2012/11/15(木) 15:13:57.73
ミスってた。スルーして下さい。
758 :
742 :2012/11/15(木) 18:45:42.93
>746 ソースありがとうございます。勉強になります。boolというのがあったので、C++なのかなと思ってしまいました・・・。 試しにincludeだけ変えて動かしてみようと思ったのですが、コンパイルエラーがでてしまいます。。。 もし何かおかしい点があれば、指摘もらえるとありがたいです。 gcc maze_test.c -o maze_test maze_test.c:11: error: expected specifier-qualifier-list before ‘_point’ maze_test.c:20: error: expected ‘;’, ‘,’ or ‘)’ before ‘=’ token maze_test.c: In function ‘RecursiveDivisionMethod’: maze_test.c:45: error: ‘for’ loop initial declaration used outside C99 mode maze_test.c:47: error: redefinition of ‘i’ maze_test.c:45: error: previous definition of ‘i’ was here (略)
759 :
742 :2012/11/15(木) 18:52:47.98
>>752 アドバイスどうもです〜。ポインタを使った値の受け渡しをうまく使えるようにならないといけませんね。
なにぶん、今までCをほとんど触ったことなかったので、ポインタの使いこなし方がよくわからなかったりします。
日々勉強ですね。
>>758 そうだね。
>>746 のコードはmaze_test.cppに保存して
gcc maze_test.cpp -o maze_test
としないといけないね。
761 :
742 :2012/11/15(木) 19:32:54.88
>>760 そういうことですか!試してみます。
ただ、.cで作らなきゃいけないので… ^^;
最近のCって文中に宣言が在っても通るんだね。
そもそも「再帰分割を利用した迷路作成」は 解く側から見て最初に経路の目星を付け易いという欠点があるよ
765 :
742 :2012/11/15(木) 23:50:39.91
>>762 無事動かすことができました!ありがとうございます。
このソース、しっかり目を通して勉強します。
>>741 実行せずに一瞥しただけでバグがすぐ見える。
死ねよ。ヘボ。ヘボヘボヘボヘボヘボヘボ。
他人のコードに言いがかる付けるのは50億年早い。お前はmalloc永久に使用禁止。
言いがかる付ける おちつけ
麻ー呂っくを禁止されると困るでおじゃる
>>766 どんなバグがあるの?動くようにしかみえないけれど
770 :
746 :2012/11/16(金) 10:33:13.30
>>753 動いてたから問題ないと思ってたけど
大きなバグがありました
#define RandInt(s, e) (!((e) - (s)) ? (s) : ((s) + rand() % ((e) - (s))))
じゃなくて
#define RandInt(s, e) ((e) - (s) <= 0 ? (s) : ((s) + rand() % ((e) - (s) + 1)))
としないとまずいですね
何で誰も教えてくれなかったんだ
ああ、 出来る迷路になんとなく偏りが有るなぁと感じたのはそのせいか。 妙に細長い道が多いとか。 みんな判っててスルーしてるんだと思ってたよ。
>>770 回答者のコードは結構検証されないもので。
>>771 rand() % ((e) - (s)) だと右端とか下端に穴が開かなくなるので
左や上に道が出来る傾向が大きくなりますね
>>742 さんの元コードそのまま使ってて
そこはあまり気にしてなかった
>>742 さんの
http://codepad.org/lMzvP9Il を改めてよく見たら
// Create walls
while( blankx1 == refx || blankx1 >= pointx || blankx1 % 2 != 1 ) {
blankx1 = rand()%pointx + refx; ←ここもおかしい
}
(略)
while( blankx2 == pointx || blankx2 >= maxx || blankx2 % 2 != 1 ) {
blankx2 = rand()%(maxx - pointx) + pointx;
}
(略) while( blankx2 == pointx || blankx2 >= maxx || blankx2 % 2 != 1 ) { blankx2 = rand()%(maxx - pointx) + pointx; } じゃなくて blankx2 = rand()%(maxx - pointx + 1) + pointx; が正しいことになります
>774 いや、 そこは大丈夫だろ。 お前がバグを埋め込んだんだよ。
もしかして 777
赤字国債の発行を 2015 年度まで認める特例公債法が成立って、3 年先まで借金の予定してるよ。 憲法第86条に反していない?違憲じゃない?
>>769 未初期化の変数使うパスが存在するだろ。Qzほど素質の無いバカはめったにいない。
死んだ方がいい。
30
INIT を通さずに DISABLE や ENABLE を呼んだ場合の抜け道?
C で書く限りそんな縛りをコードにふくませることはできないだろう。
>>741 は INIT を呼んでから DISABELE や ENABLE を呼んでいる。
であれば、「INIT を通さずに DISABLE や ENABLE を呼んだ場合の抜け道がある」というのは、それはいいがかりというもの。
それともほかにいい方法があるとでも?
>>783 抜け道云々はいいがかりだろ。 というのは同意するよ
>>779 が考える「未初期化の変数使うパス」って何だろね?と想像してたんで
お前ら全員malloc禁止な。 137行でmallocがフェイルすると145行のENABLEで未設定のrestoreSでシグナルマスクをリストアする。 でも、これをなおしても0点。無理やりfreeするためにsignal禁止なんて笑うしかない。 ダメな奴は努力してもダメなんだからあきらめて転職しろよ。乞食の方がましだぞ。
C言語 gcc Linux 問題:cat関数を作りなさい。ただし、fgets,fputsを用いること。です。 明日のお昼までにお願いします。
>>785 ∧__∧
( ・ω・) いやどす
ハ∨/^ヽ
ノ::[三ノ :.、
i)、_;|*く; ノ
|!: ::.".T~
ハ、___|
"""~""""""~"""~"""~"
>>787 宿題スレしか相手してくれないんだよ。
言わせんな恥ずかしい。
#include <stdio.h> int main(int ac, char **av) { char buf[65536]; FILE *fp = fopen(av[1], "rb"); while(fgets(buf, sizeof(buf), fp)) fputs(buf, stdout); fclose(fp); return 0; }
てす
>>785 ご指摘感謝。
またmalloc() に失敗したときだけまずい、というわけではなく
malloc() に成功した直後にシグナルが入ると、そのmalloc() で得たブロックはシグナルハンドラで解放されない、ということもありますね。
そういう意味では
>>785 の指摘は少し突っ込みが足りない。
以下に訂正します。
http://toro.2ch.net/test/read.cgi/tech/1313183984/593 >無理やりfreeするためにsignal禁止なんて笑うしかない。
いや
>>704 でそうしろ、といういわれたから興味もあってしてみただけ。
>>721 がいうほど困難ではないことがよくわかったは収穫だ。
私の経典にもそこまでは記されていない。「malloc()したもの宜しくfree()すべし」とはあるが。
わろた 指摘が足りないことを指摘してどうしても上に立ちたいんだな そのうち誰からも指摘してもらえなくなる・・・というかすでにネット上でしか指摘してもらえなくなってるのか
だから言ったろ Qは実際の自分より遥かに自分を大きく見せたいだけの自己愛性パーソナリティ障害だって 実際は社会の底辺君なので現実を見ると耐えられないんだろうな
>>795 あわれなくらい頭弱いな。シグナル禁止でいいならmainに入った直後に全部禁止すればいいだろ。
>>799 ^Cとか^Zとかkillとかは利かしておきたいの、その上で信者の務めを全うしたいの
>>721 がいうほどむずかしくないことがわかったので満足
一瞬だけ禁止するのも全部禁止するのもかわりはない。これほどのバカも珍しい。
>>801 さすがにそれは同意しかねる
割り禁とかと同じでしょう
>>801 ブロックしたシグナルはブロックが解除された時点で利くんですよ、そんなこともしらないの?
NG推奨: ◆QZaw55cn4c /tech/1313183984/
書けないからって僻むんじゃないよ
>>805 「禁止」と「ブロック」でアゲ足取ったつもりか? 救いようのないバカだな。
>>809 ちがうね「一瞬だけ禁止するのも全部禁止するのもかわりはない。」という記述が間違いであることを指摘している書けないからこんな間違いをする
ぷぷぷっ 餅つけ。日本語になってねーぞ。 「一瞬だけ禁止するのも全部禁止するのもかわりはない。」という記述は一般的には正しくない、 しかし、free教狂信者の「freeするためにsignalをブロックする」という愚かなコードを貶す文脈 の中なので「一瞬だけ禁止するのも全部禁止するのもかわりはない。」は正しい。
>>811 意味不明
>>800 がわからないの?最初から最後までブロックしたらシグナルハンドラが起動しないあと「『一瞬だけ禁止するのも全部禁止するのもかわりはない。』という記述は一般的には正しくない」理由がわかってんの?
>>811 >「freeするためにsignalをブロックする」
これも微妙ないいかただ本当に分かっているのか?
>>813-814 わからないのはお前がバカだから。www
で、お前はこれからmallocするすべての宿題の回答にそのクソコードを追加するんだろうな。
スレ違い 現実でやれ
まあ
>>704 >>712 、
>>721 にいたっては
>不可能だし(SIGKILL)、不可能なの除外して(SIGKILL以外)も困難だし。簡単とか豪語
と思っていたのが、あっさりとクズに
>>733 で9割がた書かれてしまったのがよほど腹にすえかねたんだろ
馬鹿にはありがちなパターン
あのクソコードで出来た気になってる。惨めすぎるぞ。 一瞬だけ禁止するのも全部禁止するのもかわりはない。 禁止するのはバカでもできる。
>>818 >一瞬だけ禁止するのも全部禁止するのもかわりはない。
全然わかっていないんだねクズ以下だね
クズは所詮クズしかし下だと思っていたクズが実は上だったりすると発狂する馬鹿って多いんだよね
>>663 と
>>664 を比べればすぐにわかる、というか
>>663 のあとで
>>664 >以下の利用条件を守る場合に限り利用を許可する。次回からの質問では「Qzは回答禁止」と書くこと。
とかもうねクズ以下だと自覚したときの絶望には同情するがね
毎年一番出題が多い季節になったのに、全然上がらない。
2chは時代遅れ
毎年同じ問題だから過去スレで間に合ってる希ガス売る
過去スレは●がいるんじゃない?
825 :
デフォルトの名無しさん :2012/11/18(日) 22:57:29.39
>>819-820 相変わらずトリップつけたり外したり。薄汚い奴だ。ww
バカは死んでもなおらないんだろうな。
お前もつけろよ
827 :
デフォルトの名無しさん :2012/11/19(月) 03:13:43.66
単元:プログラミング1 問題:ある指定した値までの素数の表を出力するプログラムをかけ。 環境:gcc C言語 期限:11/20まで
828 :
デフォルトの名無しさん :2012/11/19(月) 03:15:52.23
単元:プログラミング1 問題:ある指定した個数の素数の表を出力するプログラムをかけ。 環境:gcc C言語 期限:11/20まで
素数のリストではなく表なんだな
表の書式は?
>>827 #include <stdio.h>
int main(void)
{
int i, j, n;
scanf("%d", &n);
for(i = 2; i <= n; i++) {
for(j = 2; j * j <= i; j++) if(i % j == 0) goto L;
printf("%d\n", i);
L:; }
return 0; }
>>828 #include <stdio.h>
int main(void) {
int i, j, k, n;
scanf("%d", &n);
for(i = 0, j = 2; i < n; j++) {
for(k = 2; k * k <= j; k++) if(j % k == 0) goto L;
printf("%d\n", j);
i++;
L:; }
return 0; }
833 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん になります ここに書いてください
835 :
デフォルトの名無しさん :2012/11/20(火) 15:02:38.81
モリタポ乞食が生息するスレwww
なんだいったい 833はなんだったんだ いつもまにか絵kされてるぞ
単元 C言語配列 問題1 Float型配列にマクロで指定した個数の乱数(randを使う)を格納して その平均値と最大値を出力するプログラムを作成せよ。 問題2 上記の問題で結果を小さい順で表記せよ。 環境 Linux gcc C言語 期限 今週日曜日まで よろしくお願いします
>>837 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int fcmp(const void *a, const void *b) {
if (*(float *)a < *(float *)b) {return -1;}
else if (*(float *)a == *(float *)b) {return 0;}
else {return 1;}
}
int main() {
const int n = 100;
const int r = 10;
int i;
float max = 0.0;
float sum = 0.0;
float a[n];
srand((unsigned int) time(NULL));
for (i = 0; i < sizeof(a) / sizeof(a[0]); i++) {a[i] = (float) rand() / RAND_MAX;}
for (i = 0; i < sizeof(a) / sizeof(a[0]); i++) {
if (max < a[i]) {max = a[i];}
sum += a[i];
}
printf("Q.1\nAverage: %f, Maximum: %f\n\n", sum / n, max);
qsort((void *)a, sizeof(a) / sizeof(a[0]), sizeof(a[0]), fcmp);
puts("Q.2");
for (i = 0; i < sizeof(a) / sizeof(a[0]); i++) {
printf("%f", a[i]);
i % r == r - 1 ? puts("") : putchar(' ');
}
return 0;
}
マクロって言われたらマクロにしろよw
840 :
桃白白 :2012/11/21(水) 01:02:59.19
どこがスーパーなんだよw
>>838 ./a.out 0.04s user 0.01s system 55% cpu 0.104 total
>>840 ./a.out 5.37s user 0.08s system 96% cpu 5.671 total
>>840 を修正
void bubblesort(float a[], int n)
{
int i,j;
float t;
for ( i = 0; i < n; ++i) {
for ( j = i+1; j < n; ++j) {
if (a[j] > a[j]) {
t = a[j];
a[j] = a[i];
a[i] = t;
}
}
}
}
./a.out 0.05s user 0.08s system 36% cpu 0.358 total
Ave:O(n^2)とAve:O(n*log(n))のアルゴリズムなんだから要素が多くなったら当然の結果だろ バブルはあくまで要素数が少ないと期待できるときに選択するアルゴリズムで実装も容易なことが利点なんだから
>>844 お前そんなんで生きてて良く恥ずかしくないな
>>838 の
float a[n];
も
>>840 の
float a[N];
も、配列が12345678個とか多くなるとセグメンテーション違反で落ちるけど、
static float a[N];
にしたらどちらも落ちなくなります。
>>847 記憶クラスでお勉強
予め阿保みたいな数の配列になることがわかってるならstaticでもいいけど
どうなるか全く予測できないならmallocでヒープに
配列習ってる人がバブルソートとかわかるの?
わかるでしょ
ボゴソート
コムソートいいよ 比較回数はクイックソートの倍くらいかかるけど 書くのが簡単で必要メモリがものすごく少ない
そこはあれだ、スリープソートで
運任せならランダムソート これはわかりやすいソートの一例
そーとは知らなかった、勉強になるな。
そんな相当なソートは卒倒しちまうぞ
[1] 授業単元:C言語
[2] 問題文(含コード&リンク)://codepad.org/oNUxByE7
[3] 環境
[3.1] OS:LINUX
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限:11/25
[5] その他:スレ違いでしたらごめんなさい.上記に
http:をお願いします.
なげーし、mainが終わったと思ったら54行目からいきなり中身が始まるし、 { と } が全然対応とれてねーし。 文法エラーをなくしてから出直せ。 > ・問題文は、出題されたまま全文を書いてください。
エラーや文法が間違っているのは
>>861 は承知しているのでは?
このプログラムの手直しをお願いしていると思われ
出力はPGMだが、入力フォーマットが不明だし、 カラー画像のフォーマットが3個の別々のファイルってのも変だし、 前半は与えられたサンプルのようにも見えるけど、4で割る意図が不明だし、 このままでは明らかに問題文が不十分。
え だってコイツあほだろ RGBで同じようなのが3つもあるじゃん 何かを決定的にわかってないヴァカがカくようなプログラミっだぞこれ 途中が間違ってるとかそういうレヴェルじゃねーもん だれかから干しつけられたとか 自分でやろうとしたけど挫折したとか ともすれば業務的な何かだろコレ argvが5まであるらしいけど それの説明すらないだろ? コイツはそういうコミュ小だよ 何を伝えればいいのか全然わかってないアホ野郎だ
>>863 文法エラーを消すだけの知識が無いなら、まずは初心者スレなりでクリアすべきだな。
[1] プログラミング基礎 [2] 5人の学生の学生番号、身長、体重を入力し 平均身長ave_heigh、平均体重ave_weightを求める。 ただし、学生番号、身長、身長の平均からの差、体重、体重の平均からの差は 2次元配列data[5][5]に格納するようにすること。 学生番号、身長、体重の各々をkeyにして昇順、降順のどちらでもソートできるようにせよ。 ただし、ソート処理は関数化しソートアルゴリズムには選択ソート、バブルソート、クイックソートの何れかを選択可能とすること。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名 gcc [3.3] 言語: C
869 :
868 :2012/11/23(金) 05:10:30.27
>>868 #include <string.h>
が必要
公然とオナニーを見せつける猥褻行為をすぐにやめろ。
[1] 授業単元:計算機実習 [2] 問題文(含コード&リンク): whileを用いて数当てゲームを作りなさい ・コンピュータが乱数で1から1000までの数を用意する. ・プレイヤがキーボードから数を入れる. ・コンピュータの数より大きければ「大きい」,小さければ「小さい」と画面に表示する. ・コンピュータの数とプレイヤの数が同じでなければ,繰り返す. 「何回で当てられたか」を表示させる. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:11月28日
乱数ってのはもちろん正規分布の普通の乱数だよな?
>>873 コンピュータの「普通」の乱数といえば一様乱数では?
だいたい正規分布なら,平均と標準偏差も指定してくれなきゃ困る。
そういうのはこの課題の趣旨ではないんじゃないの?
メルセンヌツイスター
879 :
桃白白 :2012/11/24(土) 01:12:42.70
[1] 授業単元:C言語 [2] 問題 codepad.org/I9NEBx3U [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン: VisualStudio2010 [3.3] 言語:C [4] 期限:11/25 よろしくお願いします。
>880 3つ目は繰り返し処理を使わなくても良いのかな?
? 使ってるじゃん
>>883 問題文に書かれていないって意味じゃないの?
main(){printf("%d",(int)(log(1000000)/log(2)+1));}
[3]の問題は平方数列の和だから、 n * (n + 1) * (2 * n + 1) >= 1000000.0 の n を求めれば良いことになる。
#include<stdio.h> #include<math.h> int main() { double max = 1000000.0; printf("%d\n", (int) ceil(log(max + 1.0) / log(2.0))); }
>>887 「max以上になる(maxも含む)」場合は
printf("%d\n", (int) ceil(log(max + 1.0) / log(2.0)));
問題文のように、
「maxを超える(maxを含まない)」場合は
printf("%d\n", (int) ceil(log(max + 2.0) / log(2.0)));
[1] 授業単元:C言語 [2] 問題 0から255までの整数を8bitの2進数で表わし、小さい方から順に左から右へ並べ、 それらを上位のbitから6bitづつ区切って342個の整数に変換するとき、 (最後に2bitあまるので下位4bitを0で埋める) 変換後のそれぞれの整数の出現数をカウントし、整数とその出現数を表示する。 表示する際は、整数は6bitで表示し、整数の小さい順に出力すること。 例: 00000000 00000001 00000010 ... ↓ 000000 000000 000100 000010 ... ↓ 000000 XX回 000001 XX回 ... 111111 XX回 [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン: VC++2008 [3.3] 言語:C [4] 期限:11/25 よろしくお願いします。
>>890 ありがとうございます
多分あってます
素朴なコードで安心です
>>859 #include <stdio.h>
int main(void)
{
int i, j, n, cnt[64] = {0};
char a[8 * 256 + 4] = {0}, b[8] = {0};
for(i = 0; ; ) {
for(j = 0; j < 8; j++) a[i++] = b[j];
if(i == 8 * 256) break;
for(j = 7; (b[j] ^= 1) == 0; j--);
}
for(i = 0; i < 342; i++) {
for(j = n = 0; j < 6; j++) n = n * 2 + a[i * 6 + j];
cnt[n]++;
}
for(i = 0; i < 6; i++) b[i] = 0;
for(i = 0; ; i++) {
for(j = 0; j < 6; j++) printf("%d", b[j]);
printf(" %d回\n", cnt[i]);
if(i == 63) break;
for(j = 5; (b[j] ^= 1) == 0; j--);
}
return 0;
}
変数関数定数などの名前って重要ですね・・・ 全く読む気にならないソースになってしまう
都合よく64個全部出るもんなんだな そしてどれも5,6回 なんでそうなんの?
>>897 不思議ですよね。
それも655655と規則性があるかと思いきや、
最後の最後にどんでん返し。
>889 の仕様通りだと 110000 を 6回 にするか 5回 にするか微妙なところ
>>897 最初の 256 個のデータの並び順を
グレイコードとかにしてみるのも
面白いかも知れない
>897 ランダムじゃないんだから当たり前じゃね?
>>902 規則性が生まれるのは当たり前だと思うけど
ほぼ一様になることは何か別の理由で説明(証明?)できるだろうね
俺には分からんけど
ちなみに8bit→6bitだと皆の回答のとおり一様になってるけど
10bit→8bitとかほかのパターンだと一様にはなりませんでした
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): BMP形式のカラー画像を読み込んで2値画像を出力するプログラムを作成せよ ・サイズは320×240 ・閾値は適当に設定してよい [3] 環境 [3.1] OS:Windows7 [3.2] コンパイラ名とバージョン:VS2008 [3.3] 言語:C [4] 期限:11/28 [5] その他の制限:外部プログラムや標準ライブラリ以外のライブラリを使用してはならない
BMP形式にどこまで対応すればいいの?
BMP形式のカラー画像すべて
>905
>>909 内容を表示する問題なの?bmp->bmpに変換するのではないの?
>>912 自動変数で画像の配列とってるのは気持ち悪いなぁ。
そりゃ16bitの時代じゃないけどさ。
16bitの世界でも動くようにはしたいものだ直接の意味はないが互換性を考慮する書き方とはそういうことのような飢餓
200kくらいなら平気
64kの壁超えてるぞ
今大丈夫でも将来原因不明の症状に悩まされることになります。 そのときになって思い出すのは至難の技です。 素直に言うことを聞いておきなさい。
スレッド使うとスタックを1Mとか2Mとかに設定することがあるので、後で困る
char hoge[256][256]; で簡単に64kの壁に到達するから今では不要な小細工が必要になる RGBをプレーン毎に分解して640x400/8で32kに収めてた
そだねこの場合64kどうこうではなくてスタックに200k突っ込むのが問題か
924 :
忍法帖【Lv=40,xxxPT】(1+0:5) :2012/11/25(日) 19:49:33.26
fseekで54バイトをすっ飛ばすのは、BMPのヘッダー領域をすっ飛ばしてんだよな? 色数のエラーチェックやfseekからの戻り値のエラーチェックはしないんだなw
925 :
デフォルトの名無しさん :2012/11/25(日) 19:58:19.42
今はもうほとんど絶滅したけど OS/2WarpのBMPヘッダは54バイトじゃない
ヘッダサイズがご丁寧にヘッダに書いてあるのに固定で飛ばすとは何事か 許さん
927 :
904 :2012/11/25(日) 20:27:46.49
後出しですみません。。 RLEとビットフィールドというのにも対応してください。
[1] 授業単元:情報処理2 [2] 問題文(含コード&リンク): 1.自然数n1・n2(n1<n2)を入力し、n1からn2までの数の合計sを計算しその結果を表示しなさい ただし、sは次式で表せれるものとする。s=n2・(n2+1)-(n1-1)/2 2. 球の半径rを入力し、球の体積vを計算し、少数第2位まで表示しなさい π=3.1415 半径を入力してください-->10 答えは4188.79になります。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:C言語を始めようver2.0.0.5 [3.3] 言語: C [4] 期限:11月26日中 [5] その他の制限: ソースコードがわかればいいのですが使用データが壊れてしまったので早急です、どなたかお手伝いお願いします
>C言語を始めようver2.0.0.5 こんなコンパイラあるんだ、しらなんだ
>>929 新しいコンパイラかと思ってググって見たら、bcc32.exe を呼んでるだけじゃねーか… orz
>>930 ありがとうございました!本当に感謝です
>>931 初めて書き込んだのでわからないことだらけでしたのでミスをしてしまい申し訳ありません。
どのように書き込んだほうがよろしいのでしょうか・・・
934 :
デフォルトの名無しさん :2012/11/26(月) 00:07:43.93
>927 動作テスト用にサンプルデータ用意してくれたら考えます
[1] 授業単元:アルゴリズムとデータ構造
[2] 問題文(含コード&リンク):このプログラムを循環リストに改変せよ
http://ideone.com/6y0sLF [3] 環境
[3.1] OS:Windows7
[3.2] コンパイラ名とバージョン:VS2010
[3.3] 言語:C
[4] 期限:2012年11月27日まで
[5] その他の制限:
936 :
935 :2012/11/26(月) 02:53:56.57
937 :
桃白白 :2012/11/26(月) 03:13:38.32
938 :
935 :2012/11/26(月) 03:16:20.84
>>879 ありがとうございます!
お疲れ様でした…
940 :
桃白白 :2012/11/26(月) 21:21:49.33
3の(4)なんてないし
>>941 3の(4)
int function(int n)
{
if (n < 3) {
return 1;
}
return function(n-1)+function(n-2);
}
>>941 5
#include <stdio.h>
int ncr(int n, int r)
{
if (n == r)
return (1);
if (r == 0)
return (1);
if (r == 1)
return (n);
return ( ncr(n - 1, r - 1) + ncr(n - 1, r) );
}
int main()
{
int n, r;
printf("n r = " );
scanf("%d %d", &n, &r);
printf("%d¥n", ncr(n, r));
return 0;
}
>>945 問題を見ると、nはデクリメントさせないんじゃないの?
>>941 の5
>>946 失礼、修正しました。
#include <stdio.h>
int ncr(int n, int r){
if (n == r)
return (1);
if (r == 0)
return (1);
if (r == 1)
return (n);
return ncr(n, r - 1) * (n - r + 1) / r;
}
int main(){
int n, r;
printf("n r = ");
scanf("%d %d", &n, &r);
printf("%d¥n", ncr(n, r));
return 0;
}
if (r == 1) return (n); は無くてもよいですね
950
951 :
デフォルトの名無しさん :2012/11/28(水) 01:14:53.39
[1] 授業単元:2値化
[2] 問題文(含コード&リンク):
http://ideone.com/fskVl3 画像読み込み→2値化→2値化した画像を表示するプログラムを作成せよ
画像読み込みまでは出来ましたが、2値化がよくわかりませんでした。
フルカラー前提でRGBの全チャンネルが同値なら濃淡画像に変換され、その濃淡画像を閾値処理によって2値にするらしいですがその辺がよくわかりません
[3] 環境
[3.1] OS:Windows7
[3.2] コンパイラ名とバージョン:VS2010
[3.3] 言語:C
[4] 期限:12/1
[5] その他の制限:出来るだけ標準ライブラリでお願いします
640*480の画像をどうやって表示するのか指定はないのか
だいたい 1. ファイル入力 2. RGBをYCrCb(YCbCr)変換などでグレースケール明度を割り出し、しきい値で2値化イメージ作成 3. 画面出力 3.については、VS2010ならWin32Appで作ったウィンドウのGDIにStretchBlt();で描き出す。 2.のしきい値については、入力用のスライドバーがあると俺はうれしい という感じで良いのではないかな。俺はいまLinux作業中なので出来ませんが。
954 :
953 :2012/11/28(水) 04:26:44.79
ああごめん。
>>951 に「RGBの全チャンネルが同値なら濃淡画像に変換され、その濃淡画像を閾値処理によって2値にする」と書いてあったね。
YCrCb(YCbCr)変換は忘れてください。
2進化っていっても、パソコン内部は全部二進数だしな〜 ただ、画像から変換できたんなら あとは、文字列化して二進数で保存するなら 画像の1ピクセルあたりの幅を補完しながら 順次読み込めばいいんじゃない? 作れって? 断る。
>>951 「できるだけ」でどうしても使ってはいけないんなら駄目だけど
使えるんならOpenCV使えば瞬殺できる
アルゴリズムは二値化自体は超簡単で
画像のすべての画素に対して
if文で閾値以上なら255、閾値以下なら0にするだけ
むしろ画像をどうやって表示するのかのほうがはるかにめんどくさい
実装は正直考えたくない
閾値以上なら putc("@"); 閾値以下なら putc(" "); とかw
putc('@'); putc(' '); だったな
system();でImageMagickのコマンドを呼びだすとか
>951 センスのかけらも無いコードだな 2次元配列の使い方も間違ってる
>957 どうせなら魚偏の漢字のみで濃淡使ったAA化してくれると有難い
>>951 どんな状況でそのコードが必要なのかわからないけど
画像処理やりたいんなら悪いこといわんからOpenCV導入した方がいい
それからグレースケール変換せずにカラー画像のまま閾値処理したいってこと?
>>951 >[1] 授業単元:2値化
どこの大学だよ、こんな単元開講してるのは
>>962 課題の環境に条件つけても意味はないかと。
RGBが同値なら濃淡画像に変換される、ってなんだ? 「濃淡画像として表示される」を聴き間違えたか?
&#32;てすと&#32; &#x20;あああ&#x20; &#160;いいい&#160; 日本語が不自由なんだろ。 察してやれ。
ふ  む ふ む
fseekで54バイトをすっ飛ばすのは、BMPのヘッダー領域をすっ飛ばしてんだよな? 色数のエラーチェックやfseekからの戻り値のエラーチェックはしないんだなw
今はもうほとんど絶滅したけど OS/2WarpのBMPヘッダは54バイトじゃない
ヘッダサイズがご丁寧にヘッダに書いてあるのに固定で飛ばすとは何事か 許さん
>>951 自動変数で画像の配列とってるのは気持ち悪いなぁ。
そりゃ16bitの時代じゃないけどさ。
16bitの世界でも動くようにはしたいものだ直接の意味はないが互換性を考慮する書き方とはそういうことのような飢餓
900kくらいなら平気
64kの壁超えてるぞ
今大丈夫でも将来原因不明の症状に悩まされることになります。 そのときになって思い出すのは至難の技です。 素直に言うことを聞いておきなさい。
スレッド使うとスタックを1Mとか2Mとかに設定することがあるので、後で困る
977 :
951 :2012/11/28(水) 09:43:49.37
後出しですみません。。 RLEとビットフィールドというのにも対応してください。
次スレ要る?
イラネ。
いるない
ドーンと逝こうや!
985 :
984 :2012/11/28(水) 10:57:38.52
986 :
984 :2012/11/28(水) 11:04:32.65
987 :
984 :2012/11/28(水) 11:08:20.67
988 :
984 :2012/11/28(水) 11:28:14.93
991 :
984 :2012/11/28(水) 11:45:24.40
>>990 void main()
{
printf("乙");
main();
}
3673417 と 3673467 はどっちが良いかは好みが分かれそう。 自分は 3673417 の方が好き。
994 :
デフォルトの名無しさん :2012/11/28(水) 14:09:13.99
>990 乙python
>988 そのサイト勉強になりました。 ありがとうございました。
うめとく
うめとく
ume
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。