1 名前:デフォルトの名無しさん [2008/10/01(水) 07:28:51 BE:151474728-PLT(18888)] あなたが解けない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++の宿題を片付けます 115代目 pc11.2ch.net/test/read.cgi/tech/1217741118/
300 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 22:42:31 ] >>296 == >>299 ?
301 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 23:03:00 ] >>299 手ごわかったぜ #include<stdio.h> int nabeatu(int num){ if(num%3==0) return 1; for(;num>0;num/=10) if(num%10==3) return 1; return 0; } int main(void){ int i, n=100, nabeatu_count=0, stop_flag=0; printf("自然数を入力してください。\n"); scanf("%d", &n); for(i=1;i<=n;i++){ if(nabeatu(i)){ nabeatu_count++; if(nabeatu_count>10 && n-i>30){ static int is_first=1; if(is_first){ printf("〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜\n" " すいません、打つの大変なので中略します><\n" "〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜\n"); } is_first=0; stop_flag=1; }else{ if(!stop_flag) printf(" %5d%.*s", i, !(nabeatu_count%5), "\n"); if(nabeatu_count%5==0) stop_flag=0; } } } return 0; }
302 名前:デフォルトの名無しさん [2008/10/14(火) 23:15:36 ] 成績をつけるプログラムを教えてほしいです。 80点以上100点以内 A 65点以上80点未満 B 50点以上65点未満 C 0点以上50点未満 D それ以外の整数に対しては「ありえない」と出す
303 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 23:18:00 ] >>302 if elseでも並べておけば?
304 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 23:19:28 ] >>303 A・B・C・Dに分けれたのですが、101など100を超える場合を組み込めません
305 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 23:22:00 ] if else if else if else if else ありえない
306 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 23:22:47 ] #include <stdio.h> int main(void) { int score; scanf("%d",&score); if(80<=score&&score<=100) printf("A\n"); else if(65<=score&&score<80) printf("B\n"); else if(50<=score&&score<65) printf("C\n"); else if(0<=score&&score<50) printf("D\n"); else printf("ありえない\n"); return 0; }
307 名前:デフォルトの名無しさん [2008/10/14(火) 23:22:53 ] [1] 授業単元:データ構造 [2] 再帰的二分探索 入力の引数をint x(求める値)、int v[]、int n(要素数)の三つを用いて ループを使用せずに関数の再帰呼び出しを使うこと。 外部変数で値の受渡しはしてはいけない。 [3] 環境 [3.1] OS: Windows [3.2] gcc [3.3] C [4] 期限: 10月15日16:00まで [5] 探索する配列はソート済みのものと考えてよい。
308 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 23:26:38 ] >>306 できました。 ありがとうございました。
309 名前:298 mailto:sage [2008/10/14(火) 23:43:34 ] >>301 友達になれそうだなw
310 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 00:01:48 ] 質問です ある整数が格納されている配列seisuu[4]がある。 その配列の添え字に対応して優先度が格納される配列priority[4]を考える。 整数が小さいほど優先度は高くする。優先度は最高が4最低が0。 格納されている整数が0の場合は優先度は0。 格納されている数字は同じ場合もある。 というのを考えているのですが、 for(i=0 ; i<4 ; i++){ priority[i] = 1; /* 初期化 */ } for(i=0 ; i<4 ; i++){ if(seisuu[i] == 0){ priority[i] = 0; /* 整数が0なら優先度も0 */ }else{ /* 整数が0以外のものを発見 */ for(j=i+1 ; j<4 ; j++){ /* 発見した次の配列から数字のある配列を探索 */ if(seisuu[j] != 0){ /* 0以外の配列を発見 */ if(seisuu[i] < seisuu[j]){ /* 最初の方が小さいなら */ priority[i]++; /* 最初の方の優先度をアップ */ }else if(seisuu[i] > seisuu[j]){ /* 発見した方が小さいなら */ priority[j] = priority[i]+1; /* 発見した方の優先度を最初の方の優先度+1 */ }else{ /* 整数が同じなら */ priority[i] = priority[j]; /* 優先度を同一とする */ } } } } } このように考えてみたのですが、何か違うような気がします。 指摘等宜しくお願いします。
311 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 00:05:25 ] 5 3 2 3 と入っていたら 2 1 0 1 としたいということ?
312 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 00:20:04 ] >>311 レスありがとうございます 整数 :5 3 2 3だと 優先度:1 2 3 2 としたいです
313 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 00:40:31 ] >>312 要素数が4個固定ならガチで見てもいいと思うけど、 増減ありなら、構造体にでも詰めて、ソートしてからの方がいいように思う。
314 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 00:45:00 ] >>307 int *func(int x, int v[], int n){ int c; c=n/2; if(n<=0) return NULL; if(x<v[c]) return func(x, &v[0], c); if(x>v[c]) return func(x, &v[c+1], n-c-1); return &v[c]; }
315 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 01:24:52 ] >>300 YES >>301 ちょwこれはwwマジすかww これを参考に考えて見ますwあざす^^
316 名前:デフォルトの名無しさん [2008/10/15(水) 01:33:31 ] 1] 授業単元: 関数 [2] 問題文(含コード&リンク): 3次元のfloat型の配列 a[3]、b[3]、c[3]を頂点の座標とする三角形ABCを考える。 1.ベクトルの長さを計算する関数を作れ、ただし関数の宣言は以下のようになるようにせよ。 float Vnagasa(float *x); 2.ベクトルの差 z=y−xを計算する関数を作れ。ただし関数の宣言は以下のようになるようにせよ。 void Vhiku(float *x, float *y, float *z); 3.ベクトルの外積z=x×yを計算する関数を作れ。ただし関数の宣言は以下のようになるようにせよ。 void Vgaiseki(float *x, float *y, float *z); 4.上記1,2,3を用いて、ベクトルx、y、zを頂点とする三角形の面積を計算する関数を作れ。 float Vmenseki(float *x, float *y, float *z); 5.1,2,3,4に関してそれぞれ正しく動作しているかどうか確認するプログラムを作れ。 6.ベクトルx、y、z及び原点からなる三角錐の表面積を計算するプログラムを作れ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2008年10月20日16:00まで [5] その他の制限: 自分で関数の宣言をしなくてはならない 4番からがうまく出来ません お願いします
317 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 02:53:16 ] [1]C言語初級 [2]次のコードを並べ替えて動作するものにせよ。また 動作仕様を簡潔に述べよ。(コンパイル可能なコードと 動作仕様署を提出) for(k=0,j=1;j<=i/2;j++) k+=j; int main(int argc,char **argv){ if(i%j==0) int i=1,j,k,l,c=0; for(l=0,j=1;j<=k/2;j++) if(( i==l )&&(i<k)){ } } } l+=j; #include <stdio.h> return 0; c++; if( k % j==0 ) while(c<=10){ printf("(%d,%d)¥n",i,k); i++; [3] Solaris/Gnu C++/C [4]10/31正午まで 急ぎませんがよろしく御願いします。この手の問題 苦手中の苦手です。
318 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 03:09:27 ] /* for(k=0,j=1;j<=i2;j++) k+=j; if(i%j==0) int i=1,j,k,l,c=0; for(l=0,j=1;j<=k2;j++) if(( i==l )&&(i<k)){ } } l+=j; #include <stdio.h> c++; if( k % j==0 ) while(c<=10){ printf("(%d,%d)¥n",i,k); i++; int argc,char argv */ int main(){ return 0; } なにもせずに終了するプログラム
319 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 03:38:14 ] >>316 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7787.txt 6番は正しいか単体テストはしてない、答えが分るテストデータは自分で用意してくれ
320 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 08:33:14 ] >>317 #include <stdio.h> int main(int argc,char **argv){ int i=1,j,k,l,c=0; while(c<=10){ for(k=0,j=1;j<=i/2;j++) if(i%j==0) k+=j; for(l=0,j=1;j<=k/2;j++) if( k % j==0 ) l+=j; if(( i==l )&&(i<k)){ printf("(%d,%d)\n",i,k); i++; } c++; } return 0; } /*何も表示しないプログラム*/
321 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 10:48:31 ] うわあ。並べ替え分からんなあと思いながらやってたら>>320 と全く同じでワロタw
322 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 12:24:48 ] [1] 授業単元:マルチタスクプログラミング [2] 問題文(含コード&リンク): funcA 1〜5を表示する funcB A〜Eを表示する メインにてスレッドを生成し、生成したスレッドにfuncBを走らせる。 メインスレッドはfuncAを走らせる。 そのうえで表示結果が 「1A2B3C4D5E」となるようマルチタスクプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ:VisualStudio2005 [3.3] 言語:C++ [4] 期限:10/17(金) [5] その他の制限:特に無し イベントのやり取りでスレッドを制御せよとのことなのですがサンプルを提示して 頂けると助かります。スレッド等イメージをまだ把握しておらず… 申し訳ないですが宜しくお願いします。
323 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 13:26:06 ] 並べ替え問題はこうだと思う。 友愛数を求めるアルゴリズム。 ja.wikipedia.org/wiki/%E5%8F%8B%E6%84%9B%E6%95%B0 #include <stdio.h> int main(int argc,char **argv){ int i=1,j,k,l,c=0; while(c<=100000){ for(k=0,j=1;j<=i/2;j++) if(i%j==0) k+=j; for(l=0,j=1;j<=k/2;j++) if( k % j==0 ) l+=j; if(( i==l )&&(i<k)){ printf("(%d,%d)\n",i,k); } i++; c++; } return 0; }
324 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 13:39:56 ] まちがった。こうだ〜! 友愛数を小さい方から10個見つけるプログラム。 #include <stdio.h> int main(int argc,char **argv){ int i=1,j,k,l,c=0; while(c<=10){ for(k=0,j=1;j<=i/2;j++) if(i%j==0) k+=j; for(l=0,j=1;j<=k/2;j++) if( k % j==0 ) l+=j; if(( i==l )&&(i<k)){ c++; printf("(%d,%d)\n",i,k); } i++; } return 0; }
325 名前:320 mailto:sage [2008/10/15(水) 13:44:18 ] >>323 なるほど forには{ }がなくてifには { }があるので2文以上入るんだろうなと思ったんだよ /* 友愛数を10個表示するプログラム */ #include <stdio.h> int main(int argc,char **argv){ int i=1,j,k,l,c=0; while(c<=10){ for(k=0,j=1;j<=i/2;j++) if(i%j==0) k+=j; for(l=0,j=1;j<=k/2;j++) if( k % j==0 ) l+=j; if(( i==l )&&(i<k)){ printf("(%d,%d)\n",i,k); c++; } i++; } return 0; }
326 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 14:15:14 ] >>322 後始末無視して簡単に書いてみた #include<windows.h> #include<stdio.h> HANDLE eventA,eventB; DWORD func(HANDLE self,HANDLE other,const char*str){ while(*str) WaitForSingleObject(self,INFINITE) , putchar(*str++) , SetEvent(other); return 0; } DWORD WINAPI funcA(LPVOID p){return func(eventA,eventB,"12345");} DWORD WINAPI funcB(LPVOID p){return func(eventB,eventA,"ABCDE");} int main(){ eventA = CreateEvent(0,0,1,0); eventB = CreateEvent(0,0,0,0); HANDLE f[] = {CreateThread(NULL,0,funcA,0,0,0),CreateThread(NULL,0,funcB,0,0,0)}; WaitForMultipleObjects(2,f,1,INFINITE); printf("\n"); }
327 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 14:23:45 ] >>326 ホント面倒かけて申し訳ない。 なにやってるか全くわからないけどとりあえず張り付けてデバッグします ありがとう
328 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 16:26:42 ] [1] 授業単元:数値計算 [2] 問題文(含コード&リンク): このアーカイブにはいってるprog.cのファイルの逆の処理をする プログラムを作ってほしいのですが。プログラムの説明はソースの一番上にかいてあります。 www1.axfc.net/uploader/He/so/147917 パスはsageです。知りたいところがあれば聞いてください [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限: 10/16 の12時くらい
329 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 16:34:57 ] /ディレクトリ以下ファイルを強制的に全部消去し、消去した ファイルのサイズの平均を求めるプログラムの逆の動作って どうやって定義するのでしょうか?
330 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 16:35:43 ] できない
331 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 17:04:22 ] >>328 ソースファイルだけあげればよかったのに。 a.outとかバックアップとかいらないしそもそもgzファイルじゃなくてtgzだろとか
332 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 17:28:25 ] いや確認用に
333 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 17:47:08 ] どこの馬の骨が作ったともしれないバイナリを実行するぐらいなら自分でコンパイルするだろ。 スレ的にも。
334 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 18:19:19 ] >>332 ふてくされるなよ
335 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 19:37:00 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7788.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限: 10/16 よろしくお願いします
336 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 20:03:36 ] >>335 if(*(s+i)==' '){ これを!とか,とかでも通るようなor条件をバカみたいに作ればいいと思うよ。
337 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 20:09:51 ] だよな。 そんなこともわからずにプログラムかいてるのか
338 名前:sage [2008/10/15(水) 20:35:06 ] [1]プログラミング及び演習 [2]標準入力から読み込んで標準出力へ書き出すプログラムのいろいろ #include <stdio.h> #define MAX 128 int main(void) { char buf[MAX]; while (fgets(buf, MAX, stdin) != NULL) fputs(buf, stdout); /* function */ return 0; } を参考に行番号を付加するプログラムを自作してみて下さい. 例えば,こんな感じで出力されれば OK です. 1: #include <stdio.h> 2: 3: int main(void) 4: { 5: int c; 6: 7: while ((c = getchar()) != EOF) putchar(c); 8: 9: return 0; 10: } [3] 環境 [3.1] OS:Windows [3.2] コンパイラ:VisualStudio2005 [3.3] 言語: [4]期限: 10/21 [5]簡潔でも構わないので解説があると助かります よろしくお願い致します
339 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 21:01:14 ] >>337 自分のできる範囲でバカみたいにかいた上で、これはもうちょっと どうにかならんのかねって疑問がわき、そこでやっとASCIIコード体系なりis系関数なりを知って 感激しつつ改善するに至るんだが、いきなり結果を得ても何も理解できないし苦痛だよね。
340 名前:デフォルトの名無しさん [2008/10/15(水) 21:02:19 ] 自分の学籍番号,氏名をキーボードから入力し, 画面に表示するプログラムを文字型配列を用いて作成せよ
341 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 21:05:33 ] >>338 int i = 0; while (fgets(buf, MAX, stdin) != NULL) printf("%d: %s", i++, buf);
342 名前:338 mailto:sage [2008/10/15(水) 21:30:57 ] >>341 回答ありがとうございます。 試してみたのですが エラー E2342 numcpy.c 6: パラメータ '__s' は signed char * 型として定義されてい るので int は渡せない(関数 main ) と出てしまいました。 また自分の説明不足なのですが、まだ明解C言語入門編第8章という 初歩的なところまでしか学習しておらず、%sという表現が理解できません。 御手数おかけして大変申し訳ないのですが、もう少し簡単な回答を頂けないでしょうか?
343 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 21:56:16 ] >>342 >>341 じゃないけど。 numcpy.cを全部貼ってみて。 while (fgets(buf, MAX, stdin) != NULL) {fprintf(stdout, "%d: ", i++); fputs(buf, stdout);} これなら? 8章まで進んでたらprintfぐらい出てきてそうなもんだけどな。
344 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 21:57:03 ] >>338 #include <stdio.h> int main(void) { int buf,i=1; do{ printf("%d:",i++); while ( (buf=getchar()) != '\n' && buf!= EOF) ; }while(buf!=EOF); return 0; }
345 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:10:26 ] >>344 寝てこい
346 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:12:08 ] >>345 お前がまともなソースを書いてから意見しろよ、クズがw
347 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:14:56 ] >>346 まともなソースかどうか知らんが回答はしてる。 直近だと>>343 になってしまうけどな。
348 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:19:20 ] >>346 あんまりカリカリすんなよw どの宿題待ち?
349 名前:338 mailto:sage [2008/10/15(水) 22:21:56 ] >>343 >>344 回答ありがとうございます。 #include <stdio.h> #define MAX 128 int main(void) { char buf[MAX]; while (fgets(buf, MAX, stdin) != NULL) fputs(buf, stdout); /* function */ return 0; } と343を参考に #include <stdio.h> #define MAX 128 int main(void) { int i; char buf[MAX]; while (fgets(buf, MAX, stdin) != NULL) {fprintf(stdout, "%d: ", i++); fputs(buf, stdout);} return 0; } としてみましたが、 2147344384: 2147344385: 2147344386: 2147344387: となってしまいました。 自分なりに考えてみたのですが、どこが間違っているのでしょうか?
350 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:22:57 ] そんなエラー あれが間違ってるにきまってんじゃん。 そういうエラーに遭遇したことないのか
351 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:24:06 ] >>349 int i=0; のところを参考にし忘れてる
352 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:27:51 ] その変数がからかどうかを確認するのは 一番最初じゃね?
353 名前:338 mailto:sage [2008/10/15(水) 22:30:45 ] >>351 ご指摘ありがとうございます #include <stdio.h> #define MAX 128 int main(void) { int i=0; char buf[MAX]; while (fgets(buf, MAX, stdin) != NULL) {fprintf(stdout, "%d: ", i++); fputs(buf, stdout);} return 0; } 0: 1: 2: 3: 4: となりました。ただ、問題には 例えば,こんな感じで出力されれば OK です. 1: #include <stdio.h> 2: 3: int main(void) 4: { 5: int c; 6: 7: while ((c = getchar()) != EOF) putchar(c); 8: 9: return 0; 10: } とあるのですが、これで正解ということでいいんでしょうか? 何度も質問してしまい、申し訳ありません。
354 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:33:20 ] >>353 numcpy.exe < numcpy.c とかコマンドプロンプトで。 1から開始したいという要望が出ると思うけどそこは自分なりに考えて。
355 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:35:55 ] >>353 >>338 #include <stdio.h> #include <string.h> #define MAX 128 int main(void) { char buf[MAX]; int i=1,ch; FILE *tmp=tmpfile(); if(tmp==NULL) {perror(""); return 1;} while (fgets(buf, MAX, stdin) != NULL) fwrite(buf,strlen(buf),1,tmp); /* function */ rewind(tmp); do{ printf("%d: ",i++); while((ch=fgetc(tmp))!='\n' && ch!=EOF) putchar(ch); puts(""); }while( ch != EOF ); return 0; }
356 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:38:53 ] なっ、なぬっ!?リダイレクトを使うとな?ならば先にそう言うでおじゃるよ。
357 名前:338 mailto:sage [2008/10/15(水) 22:39:21 ] >>354 なるほど、そういうことだったんですね。 >1から開始したいという要望が出ると思うけどそこは自分なりに考えて。 はい。ここまで教えて頂けたので後は自力でなんとかしたいと思います。 色々と本当にありがとうございました。 >>355 回答ありがとうございます。 こちらも参考にさせて頂きますね。
358 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:00:56 ] >>328 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7790.c 気が向いたので、なんとなく作ってみた。
359 名前:328 mailto:sage [2008/10/16(木) 00:11:00 ] >>358 ありがとう。
360 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:23:58 ] >>358 俺が作ったのも同じバイナリを吐くんだけど、元のバイナリと内容が異なる
361 名前:358 mailto:sage [2008/10/16(木) 00:37:46 ] >>360 それをまたテキストも戻して、diffしてバイナリにする元のテキストと同じだから気にしなかった。 コンパイラやそのバージョンによっても、生成される機械語が違うからそんなもんだと思う。 最初にできたときにはdiffが違うのが気になって確認した。 しかし、float(0x3E624825)とfloat(0x3E62480F)が同じ値になっていたので、上げたんだけど。
362 名前:328 mailto:sage [2008/10/16(木) 01:23:45 ] まあ試験的に数値が多いテキストでもバイナリにしようとおもうんだけど この例では13個x()個てデータだったけど 30個x()個なかんじのデータだったらサイズもかえないといけないのかな? とおもったけどそうでもなさそうですね。
363 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:59:56 ] >>361 > コンパイラやそのバージョンによっても、生成される機械語が違うからそんなもんだと思う。 うーん、実行ファイルについてではなくて。 > しかし、float(0x3E624825)とfloat(0x3E62480F)が同じ値になっていたので、上げたんだけど。 なるほど。 にしても元のバイナリに戻せないのでは意味がないように思うんだなあ。何で変わっちゃうんだろ。
364 名前:デフォルトの名無しさん [2008/10/16(木) 02:48:17 ] 問題文:2つの円の位置関係(交わる(交点)、含まれる、離れている) これを求めるにはどんな感じで書けば良いでしょうか?
365 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 02:52:49 ] 数学じゃん! 2円の半径と中心間の距離を考える!
366 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 02:52:53 ] >>364 中心座標間の距離 - ( 円1の半径 + 円2の半径 ) の符号を調べる
367 名前:デフォルトの名無しさん [2008/10/16(木) 02:58:03 ] 数学的な考え方は解るのですが、 先週C++を始めたばかりで書き方がなかなか解りません;; 初歩的ですみません。
368 名前:358 mailto:sage [2008/10/16(木) 03:03:52 ] >>363 0 01111100 11000100100100000100101 (0x3E624825) 0 01111100 11000100100100000001111 (0x3E62480F) s [- e -] [--- m ---] (-1)^s × 2^(e-127) × (1 + m/(2^23)) (Sign, Exponent, Mantissaはそれぞれ、十進数) (-1)^(0)*2^(124-127)*(1+6440997/(2^23)) = 0.220978335 (-1)^(0)*2^(124-127)*(1+6440975/(2^23)) = 0.220978007 となるから、floatの精度のため値としては同じになったみたい。 16進表記で変わった理由は、機械語とそれに伴うFPU命令の違いからじゃないかな(実際はどうか知らん)。 エロい人後は頼んだ。
369 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 03:24:27 ] >>368 質問者でもない者に対して丁寧に細かくありがとう>< エンディアンそっちのけでバイナリデータ見てた俺のバカ!
370 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 03:32:57 ] まっ、麻呂のクソースはいらんかえぇ〜〜?
371 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 07:20:45 ] >>361 テキストにした時点で精度が落ちてるから元には戻せないよ
372 名前:デフォルトの名無しさん [2008/10/16(木) 08:49:22 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 英文を入力すると、単語に分割して出力するプログラムを書く。 ただし、ピリオドとカンマは出力しないようにすること。 (実行例) 英文を入力してください: There is , a textbook. --- There is s textbook --- [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 来週の木曜日 [5] その他の制限: 出来ればプログラミング下手な自分にもわかるように解説を付けてくれると助かります。 よろしくお願いします。
373 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 09:40:15 ] >>372 #include <stdio.h> #include <string.h> int main(void){ char buf[256]; char *p; printf("英文を入力してください:(255文字まで)\n"); fgets(buf, 256, stdin); p = buf; p = strtok(buf, " ,.\n"); while (p) { printf("%s\n", p); p = strtok(NULL, " ,.\n"); } return 0; }
374 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 10:04:36 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): まず大きな正方形のエリアがあり その大きな正方形の中に小さな正方形のエリアがある。 次に大きな正方形の線上で2点を取る。(一方は左下に固定) 左下の固定点と入力した大きな正方形の線上の二点を線で結び その直線が中の小さい正方形に重なるか重ならないかを判定する [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:10月中 [5] その他の制限:特になし 考えてみたけどさっぱりわかりません 正方形の大きさは変えられると助かります よろしくお願いします。
375 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 11:21:02 ] 数学知識に遥かにウェイトがある問題に言語の技巧の問題を 組み合わせた課題を出す教師は...
376 名前:デフォルトの名無しさん [2008/10/16(木) 11:29:00 ] 一般化すれば、 平面座標内に正方形と直線があり 交わりがあるかどうかを調べる
377 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 11:33:00 ] >>374 (数学の解) まず直線の傾きとy切片を求め直線の式を作れ y = ax + b 次に小さい正方形のx座標を代入してその値とy座標の値を比較 a * x1 + b - y1 a * x2 + b - y2 a * x3 + b - y3 a * x4 + b - y4 4つの正負が同じなら重ならない 1個でも負号が違えば重なる 0は適当にどちらかに決めて処理 ↓ Cでプログラム
378 名前:デフォルトの名無しさん [2008/10/16(木) 11:34:54 ] より一般化すれば、凸多角形の共通部分や、 多角形ポリゴン同士の衝突判定をしたいのですが。。。 だ。 Spaghetti Source - 凸多角形の共通部分 www.prefield.com/algorithm/geometry/convex_intersect.html 多角形ポリゴン同士の衝突判定をしたいのですが。。。 - 教えて!goo oshiete1.goo.ne.jp/qa675246.html
379 名前:374 mailto:sage [2008/10/16(木) 11:42:23 ] ありがとうございます 書き忘れて申し訳ないのですが二次元で大丈夫です >>377 さん 左下を原点とすれば切片0は可能ですよね? Cの知識がなさすぎて組めないorz
380 名前:デフォルトの名無しさん [2008/10/16(木) 13:32:11 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): bmp画像の各ピクセルごとの数値を読み込み、 二次元配列として表示するプログラムを作成せよ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Visual Studio 2005 [3.3] 言語:C [4] 期限:10月中 [5] その他の制限:特になし まったく見当がつきません。 よろしくお願いします
381 名前:デフォルトの名無しさん [2008/10/16(木) 13:34:45 ] [1] 授業単元:c++builder [2] 問題文(含コード&リンク):下に提示 [3] 環境 [3.1] OS:windows xp [3.2] C++ builder5 [3.3] 言語:C++ builder [4] 期限: 10/17まで Memo1には Memo2には Memo3には Memo4には 5 4 5 2 6 3 2 6 5 1 8 4 6 4 6 6 と出してあるのですがこの4つのMemoの列に対応させて足し算したものを Memo5に 16 17 18 22 と出したいのですがどのようにすればいいんでしょうか。 builderに関してほとんど手探り状態なのでどなたかわかる方よろしくお願いします。
382 名前:デフォルトの名無しさん [2008/10/16(木) 13:58:13 ] 見当つかないんだったらフォーマットくらい調べろよ できるかもしれないじゃんか
383 名前:デフォルトの名無しさん [2008/10/16(木) 15:10:05 ] C++で2分法のf(x)=X*X-2 プログラムよろしくお願いします。
384 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 15:19:35 ] >>379 合ってるかどうかは知らない あと、くそーすだがあしからず #include <stdio.h> int main(void) { double x, y, a, tmp; int i; //大きな正方形の座標(左下、右下、左上、右上) double large_x[4] = {0.0, 10.0, 0.0, 10.0}; double large_y[4] = {0.0, 0.0, 10.0, 10.0}; //小さな正方形の座標(左下、右下、左上、右上) double small_x[4] = {5.0, 7.0, 5.0, 7.0}; double small_y[4] = {1.0, 1.0, 3.0, 3.0}; printf("大きな正方形の線上の点"); scanf("%lf %lf", &x, &y); a = y / x; tmp = a * small_x[0] - small_y[0]; for(i=1; i<4; i++){ if( tmp * (a * small_x[i] - small_y[i]) <= 0.0 ) break; } if(tmp > 0.0) printf("重ならない\n"); else printf("重なる\n"); return 0; }
385 名前:デフォルトの名無しさん [2008/10/16(木) 15:19:42 ] #include <stdio.h> #define GOSA 0.0001 float sqr(float c){ double x=c,y; while(1){ y=x*x; if(y>c-GOSA)if(y<c+GOSA)break; x -= (y-c)/(2*x);} return x; }
386 名前:デフォルトの名無しさん [2008/10/16(木) 15:19:46 ] [1] 授業単元:情報処理演習2 [2] 問題:1.大きさ5の配列の各要素に整数データを読み込みながら順次格納して、全要素を逆に並びかえて、その配列の0番から順に内容を表示するプログラムをつくりなさい 2.正整数を順次配列に読み込んで、三番目に大きな数(全て大きい数なら、左から三番目の数)を出力するプログラムを作れ。尚、0を読み込むと終了すること ただし、必ず3個以上を読み込むと仮定してもよい [3] 環境 [3.1] OS:Linux [3.2] gcc [3.3] 言語:C [4] 期限 16日の23:59分まで お願いします
387 名前:デフォルトの名無しさん [2008/10/16(木) 15:20:40 ] >>385 は X*X=cを解くプログラムね
388 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 15:50:49 ] >>386 (1) #include<stdio.h> int main(){ int a[5],i,left,right; for(i=0;i<5;++i)scanf("%d",a+i); for(left=0,right=5-1;left<right;++left,--right) i = a[left] , a[left] = a[right] ,a[right] = i; for(i=0;i<5;++i)printf("%d\n",a[i]); } (2) #include<stdio.h> #include<stdlib.h> int compare(const void*a,const void*b){ int c=*(int*)a,d=*(int*)b; return (c>d) - (c<d); } int main(){ int a[4]={-1,-1,-1,-1}; while(scanf("%d",a),*a != 0)qsort(a,sizeof a/sizeof*a,sizeof*a,compare); printf("%d\n",a[1]); }
389 名前:386 [2008/10/16(木) 17:00:07 ] すいません! osなんですが、Linuxとunix系OSを間違えて書いてました…… 正しくは OS:unix系のOSかwindowsです 申し訳ありません……
390 名前:デフォルトの名無しさん [2008/10/16(木) 18:45:15 ] [1] 授業単元: [2] 問題文(含コード&リンク): 以下のようなデータが大量に格納されているファイルがある. [ダウンロード www.vox.tutkie.tut.ac.jp/~katurada/test.list ] このファイルを読み込み,数値(キー)と英単語(データ)をセットにして 1データとして2分木へ格納し、数値(キー)にある値を指定して検索を行えば、 その数値(キー)に対応する英単語(データ)を検索できるプログラムを作成せよ。 ふたつめ 上記で使用したtest.list を読み込み,数値(キー)と英単語(データ)をセットにして 1データとしてリストへ格納し、数値(キー)にある値を指定して検索を行えば、 その数値(キー)に対応する英単語(データ)を検索できるプログラムを作成せよ。 そして、上記の木構造による実装との検索時間を比較せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:[2008年10月19日24:00まで]
391 名前:390 [2008/10/16(木) 18:46:22 ] 5] その他の制限: 1. 格納できるデータ量は(メモリの許す限り)上限はない. 2. 対応する英単語が見付からない場合は、その旨を表示すること。 3. データは,「数値,英単語\n」(\nは改行)で定義されるものとする. 4. データが格納されたファイルは、プログラムの引数で指定できるようにせよ。 5. データは2分木に格納せよ。 6. 数値(キー)に重複はない。 7. 数値(キー)は8桁以内である。もしファイルに9桁以上の数値が入っていた場合はエラーを出力して終了せよ。 8. 数値(キー)に数字以外の文字(アルファベットなど)が含まれていた場合は,エラーを出力して終了せよ. 9. 検索時の入力にも9桁以上の数値や数字以外の文字が入力された場合はエラーを出力して終了せよ. 10. 英単語は25文字以内である。もしファイルに25文字以上の英単語が入っていた場合はエラーを出力して終了せよ。 ふたつめ # リストによる実装において、データの挿入は数値(キー)によるソートは行わず、単純にファイルに出現した順番にリストに追加していって下さい。 # リストによる実装での検索も、単純にリストの先頭から比較していくような単純なアプローチで結構です。 # 1回の検索では検索時間の差がないでしょうから、10000回くらい繰り返して下さい。なお、test.list のデータ数は130万個あります。 よろしくお願いします。
392 名前:374 mailto:sage [2008/10/16(木) 18:46:38 ] >>384 ありがとうございます ヒントにしてもうちょい考えてみます
393 名前:デフォルトの名無しさん [2008/10/16(木) 21:26:24 ] >>373 ありがとうございました。 これを参考に、自分なりにもう少し頑張ってみます
394 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 22:02:18 ] >>380 bmpのフォーマットは?
395 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 23:06:39 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): UDPサーバkansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7791.txt UDPクライアントkansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7792.txt 問題文(2問あります)kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7793.txt [3] 環境 [3.1] OS:WindowsXP [3.2] Visual stdio2005 [3.3] 言語:C [4] 期限:10月17日午後13:00まで [5] その他の制限:特になし よろしくお願いします
396 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 00:43:47 ] [1] 授業単元:プログラミング技術 [2] 問題:30000以下の数字を入力して、「○時間、○分、○秒」と出力するプログラムを作りなさい。 <時間を分にして、分は秒にして、秒は分の答えの余り> [3] 環境 [3.1] OS:Windows XP [3.2] Ultla C [3.3] 言語:C [4] 期限 特にありません よろしくお願いします。
397 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:17:09 ] >>396 #include <stdio.h> int main() { int x; scanf("%d", &x); printf("%2d時間%02d分%02d秒", x / 3600, x % 3600 / 60 , x % 3600 % 60); return 0; }
398 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:28:59 ] [1] 授業単元:C [2] 問題:n=1 4973/n*2で始まり、4973/n*2の計算の答えが1になるまでnを増やしていき 1になったところで今まで出した数字を全部足した答えを出すプログラム。 少数は切り捨て。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限 [10/17/07:00まで] 2 4 8 4096 (4973/n*2)+(4973/n*2)+(4973/n*2)+・・・・(4973/n*2) 2486 + 1243 + 621 +・・・・ 1 =4965 手計算だと最後のnは2048になって答えが4965になったのですが。 プログラムについてはさっぱりなので助けてください。。。
399 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:36:21 ] >>398 あ、n*2じゃなくて、2^nです。
400 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:41:42 ] こんなでいい? #include<stdio.h> int main(){ int sum,ex; for(sum=0,ex=2; 4973/ex >= 1; ex*=2){ sum += 4973/ex; } printf("%d\n",sum); return 0; }