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/
641 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 01:23:17 ] [1] 授業単元:ハッシュ法 [2] 問題文(含コード&リンク):指定したファイルを読み込み開放番地法でのハッシュ表を生成し、 (i) 線形探査法 (ii) 二重分散法 に基づいた探索関数を作成せよ。 (i),(ii)の探索関数を用いて任意の値 (a) 表中に存在するキー 100個 (b) 表中に存在しないキー 100個 について連続で探索し、総探査回数、総実行時間を記録する。(一部略) [3] 環境 [3.1] OS: Linux [3.2] gcc [3.3] 言語: C [4] 期限: 11月12日21時迄 www1.axfc.net/uploader/He/so/157773 (pass: jik1) ↑中身は問題原文、指定されたファイル、自分で作成したプログラムソースです 対象ファイルの中身が文字列なので探索にstrcmpを用いようとしたのですが、実行時にエラーが出てしまってどうすればいいかわからない状態です よろしくお願いします
642 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 01:29:27 ] [1] 授業単元:アルゴリズム [2] 問題文:5人の学生の3教科の点数(0~100点)をランダムに表示させる。 それぞれの合計点を計算し、合計点の高い順に順位をつける。 [3] 環境 [3.1] WindowsXP [3.2] gcc 3.4 [3.3] C [4] 期限:なし どなたかおねがいします…orz
643 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 02:06:34 ] >>642 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8011.c
644 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 02:08:18 ] 変数tmpはいらないから消してくれ
645 名前:デフォルトの名無しさん [2008/11/12(水) 02:29:43 ] >>613 ありがとうございます 聞きたいんですが、a[]にn個の整数が入ってるとしてって所なんですけど、どうやって定義したんですか?
646 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 04:48:09 ] >>645 int a[] = { 121, 11, 14641, 1331};
647 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 05:36:33 ] 1] 授業単元:プログラミング演習1 C言語の基礎 [2] 問題文(含コード&リンク): S=1+2+・・・n<100 を満たす最大の自然数nとSを出力するプログラムを作成してください。 for文とwhile文を用いたのをそれぞれ作成すること。 考え方:ループを用いて1から順に自然数を足して行き、 和が100を段階で計算を打ち切るようにプログラムする [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: (gcc バージョンは最新 [3.3] 言語: C [4] 期限: 今日 [5] その他の制限:変数とハローワールドとscanf、条件文しかならってないはず 期限が近い・・・よろしくお願いします
648 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 06:06:08 ] >>647 #include <stdio.h> main() { int S = 0, n; for(n = 1; S + n < 100; n++){ S += n; } n--; // 足しすぎたので 1 引く printf("n:%d S:%d\n", n, S); S = 0; n = 1; while(S + n < 100){ S += n; n++; } n--; printf("n:%d S:%d\n", n, S); }
649 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 06:14:44 ] >>648 なるほど・・・条件にS<100だから105しかでてこなかったのか俺・・・。 ありがとうございまいした、勉強になりました
650 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 08:00:09 ] [1] 授業単元:画像情報工学 [2] 問題文(含コード&リンク): ブレゼンハムのアルゴリズムを用いて、ウインドウ内に線分を描画するプログラムを作成しなさい。 仕様1(マウスの左ボタンと右ボタンを使用する。候補線の表示は無し。) マウスの左ボタンクリック 線分の始点座標の指定 マウスの右ボタンクリック 線分の終点座標の指定及び線分の描画 [3] 環境 [3.1] OS:vista [3.2] コンパイラ名とバージョン:VC++ 2008 [3.3] 言語: C [4] 期限: 2008年11月12日まで [5] その他の制限: ライブラリの点を描画するAPI関数を使って線分を引くこと。直線を引くAPI関数を使ってはならない。 Cは簡単なものしかやったことなくて全く分かりません 誰か助けてくださいお願いします……
651 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 08:16:50 ] 誰か610お願いします
652 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 08:29:43 ] >>610 @ /* (x,y)-平面の点を座標で表す構造体 */ struct Point { double x; double y; }; /* 原点からの長さを求める関数 */ double length_vector_p(struct Point *p) { return sqrt(p->x*p->x + p->y*p->y); } /* 平面の点を表示する関数 */ void print_v_p(struct Point *p) { printf("%f %f\n", p->x, p->y); } int main(void) { struct Point p; printf("Input Point X: "); scanf("%lf", &p.x); printf("Input Point Y: "); scanf("%lf", &p.y); print_v_p(&p); /* print_v_pを使用して,座標の表示 */ printf("The length of vector: %f\n", length_vector_p(&p) ); return 0; }
653 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 08:32:46 ] >>610 A struct Point { double x; double y; }; void input_point_p(struct Point *p){ printf("X:"); scanf("%lf", &p->x); printf("Y:"); scanf("%lf", &p->y); } void print_v_p2(struct Point *p){ printf("%f %f\n", p->x, p->y); } int main(void){ struct Point *p; /* 構造体ポインタ変数 p */ int num, i; printf("Input number of vector: "); scanf("%d", &num); for (i=0; i< num; i++) { p = malloc(sizeof(struct Point)); /* malloc を使って領域確保 */ if( p == NULL ) { printf( "memory cannot alloc!\n" ); exit( 1 ); } input_point_p(p); /* 関数を使って要素を代入 */ print_v_p2(p); /* 関数を使って要素の表示 */ free(p); /* メモリの解放 */ } return 0; }
654 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 08:38:01 ] >650 期限は12日じゃなくて19日まででした……
655 名前:デフォルトの名無しさん [2008/11/12(水) 10:13:51 ] >>646 ありがとうございます!
656 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 11:27:53 ] >>650 ライブラリって何の? 専用のをつかってるならそれもうp
657 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 13:21:11 ] 期限が1日伸びたので>>491 をお願いできませんか?
658 名前:608 mailto:sage [2008/11/12(水) 13:21:57 ] ちょっと聞きたいんですけど、学校から>>608 に関係した問題が追加で出されたんだけど、それを解いてもらえることってできますか?
659 名前:デフォルトの名無しさん [2008/11/12(水) 13:24:12 ] [1] 授業単元 プログラミング基礎 [2] 問題文(含コード&リンク) マイナスの値が入力されるまで繰り返し整数値を入力し最大、最小を求める。 初期化で最大値には最小の値を、最小値には最大の値を設定しておく。 繰り返しにはwhile文を使用する。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年 11月14日 18時 [5] その他の制限: 特になし よろしくお願いします
660 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 13:40:57 ] >>656 渡されたプリントに書いてあったまんまなんで、自分でも良くわかりません…… 授業ではC言語はおろかPCにすら触ってません
661 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 13:59:59 ] >>660 単に授業を聞いてなかったとかサボってたとかじゃなくて? 何の前説もなしにそのプリントをぽんと渡されただけなら行く学校を間違えたな たぶん、説明はあったのに理解できなくてスルーしただけだろうけど
662 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 14:05:51 ] >>659 #include <stdio.h> int main (void) { int n, min=32767, max=0; while(1){ scanf("%d", &n); if(n<0) break; if(n > max) max = n; if(n < min) min = n; } printf("min = %d, max = %d\n", min, max); return 0; }
663 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 14:11:44 ] >>657 ' ' とか '■' とか '○' マルチバイト文字を扱うのが面倒 ' ' とか '*' とか 'o' でよかったらそんなにかからないけど
664 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 14:47:40 ] >>659 >>662 + 初期値可変入力 #include <stdio.h> int main( void ) { int i, n; int imin, imax; int nmin, nmax; printf( "最小値の最大を入力してください>" ); scanf( "%d" , &imin ); /* 数値の入力 */ printf( "最大値の最小を入力してください>" ); scanf( "%d" , &imax ); /* 数値の入力 */ nmin=imin; nmax=imax; while (1) { printf( "数値を入力してください>" ); scanf( "%d" , &n ); /* 数値の入力 */ if ( n < 0 ) /* 終了 */ { printf( "終了\n" );break;} if ( n < imin ) /* 最小値 */ { nmin= n;} if ( imax < n ) /* 最大値 */ { nmax= n;} } printf(" 最小:%d\n", nmin); printf(" 最大:%d\n", nmax); }
665 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 14:54:11 ] >>661 授業が元々コンピュータでの画像の描画方法についてなんです 今までプログラムなんて一切なしでアルゴリズム?みたなのを学んでて いきなりレポートの概要渡されました 授業は毎回出てますし、ノートも取ってます それに居眠りとか出来る状況じゃないので 説明はあったんですが、それまでの知識じゃ全く理解できませんでした
666 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:03:29 ] どなたか>>641 お願いできないでしょうか? ヒントだけとかでもいいので・・・orz
667 名前:デフォルトの名無しさん [2008/11/12(水) 15:39:48 ] >>646 調べたい整数の数を を選べるようにするにはどうすればいいの?
668 名前:639 mailto:sage [2008/11/12(水) 15:46:44 ] >>640 あ、すいません。 getsの間違いでした。 fgets…使ってみたんですが、エラーが出ました。 今作っているソースは #include<stdio.h> #include<iostream> #include<string> using namespace std; int main(){ char filename[20], time[100], data[1000000]; FILE *fp; cout<<"CPUtime?"<<endl; gets(time); cout<<"data?"<<endl; gets(data); fp = fopen("file.txt","w"); fprintf(fp,"%s\n",time); fprintf(fp,"%s",data); fclose(fp); } で、本当は「file.txt」ってなってるファイル名を、キーボードから受け取るようにして(filenameとは宣言したものの…) dataに、 「 0 1.99400005840289e-007 -1.99400005840289e-007 9.89100023673223e-014 2.63400000595493e-012 1e-011 1.99400005840289e-007 -1.99400005840289e-007 9.89000006022811e-014 2.63400000595493e-012 2e-011 1.99400005840289e-007 -1.99400005840289e-007 9.89100023673223e-014 2.63400000595493e-012 4.000015229e-011 1.99400005840289e-007 -1.99400005840289e-007 9.89299991211411e-014 2.63400000595493e-012 …」みたいな改行を含んだ文字をコピーして実行画面(コマンドプロンプト)に貼り付けてテキストファイルを作りたいんですがよく分かりません。
669 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:48:54 ] >>667 調べたい整数をユーザに入力させたい、ってとこか? それならこんなかんじ。 int main(int argc, char *argv[]) { int *a; int n, i, g; printf("調べたい整数の数は?: "); scanf("%d", &n); a = malloc(n * sizeof(int)); for (i = 0; i < n; i++) { printf("%d 個目の整数を入力してください: ", i+1); scanf("%d", &a[i]); } g = a[0]; --- >>613 と同様 -- free(a); return 0; }
670 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:01:12 ] >>612 解答あり >>600 の(2)できる方おねがいします
671 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:10:20 ] >>663 それでお願いできますか?
672 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:14:23 ] >>665 理解できなかったのならなぜ質問しなかったのだろう? その感じだと実際に動作するコードを書くのではなく アルゴリズムや疑似コードをレポートにして提出しろってことなのか?
673 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:19:45 ] >>668 余計なお世話だけど、 time って関数があるから time という変数名は避けたほうがいいかも。 fp = fopen("file.txt", "w"); fprintf(fp, "%s\n", time); while (fgets(data, sizeof(data), stdin) != NULL) { fprintf(fp, "%s", data); } fclose(fp); とすれば、Ctrl-D を入力するまで読み取り続けます
674 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:21:11 ] >>671 よく考えたら、表示のときだけマルチバイト文字使って、内部データは 普通の int とか char とか好きなので行けるわ もう一点確認だけど、どっちからどっちに球が飛んでいけばいいの?
675 名前:デフォルトの名無しさん [2008/11/12(水) 16:22:19 ] 生活安全課のボツボツキモデブ●創価●警官名言集www 「俺の脅迫のおかげで家から出れなくした。俺の手柄だ!」 「昼間は市役所のパトロール隊を使う。夜は消防団を使う。」 「●指導●じゃない、パトロールを●お願い●してるだけだ。人権侵害行為は俺の責任じゃない!」 熊本隆談www
676 名前:デフォルトの名無しさん [2008/11/12(水) 16:23:34 ] >>669 : In function ‘main’: :22: 警告: incompatible implicit declaration of built-in function ‘malloc’ :24:8: 警告: 不明なエスケープシーケンス '\$' だそうです
677 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:29:14 ] >>676 #include <stdlib.h> を追加。 それから a = (int *)malloc(n * sizeof(int)); と、キャストしたほうがいいかも。 下のは知らん。日本語の文字列が正しく読まれてないのかもしれない。 適当に文字列を半角英数字のみにしてみて。
678 名前:デフォルトの名無しさん [2008/11/12(水) 16:36:38 ] テスト中orz 1.から100までの整数で3の倍数の整数の合計を求めるプログラムをFor文を利用して作ってください。 2.1の問題をForの変わりにWhile文で頼みます。 余裕があれば、 3.タクシー料金:最初の2kmまで650円 以後400mごとに90円としたとき、乗車距離(km)を入力し、 料金求める。 おねがいします。
679 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:41:59 ] >>678 テストぐらい自分でやれ!
680 名前:デフォルトの名無しさん [2008/11/12(水) 16:42:11 ] >>816 /*1.*/ #include <stdio.h> int main(void){ int i, sum = 0; for(i = 1; i <= 100; i++){ if (i % 3 == 0) sum += i; } printf("合計は %d\n", sum); } /*2.*/ #include <stdio.h> int main(void){ int i = 1, sum = 0; while(i <= 100){ if (i % 3 == 0) sum += i; i++; } printf("合計は %d\n", sum); } /*3.*/ #include <stdio.h> int main(void){ double kyori; int ryokin; printf("乗車距離(km): "); scanf("%lf", &kyori); if (kyori < 2) ryokin = 650; else ryokin = 650 + (kyori / 400) * 90; printf("料金は %d円です。\n", ryokin); }
681 名前:639 mailto:sage [2008/11/12(水) 16:43:13 ] >>673 ありがとう!ありがとう!改行文字も出来ました。 でもCtrl-Dを入力せずに、貼り付けた文字の最後まで行ったら自動で終了するのは出来ないんでしょうか? >>668 に書いた数値データ、何百行もあるのですが、最後の行まで読み込んだら終了させたいです。
682 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:59:53 ] >>667 出来ました! マジでありがとうございます
683 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:02:22 ] >>681 何をもって読み込みを終了するかが決められないからムリかな。 >>673 のコードでは、EOF (Ctrl-D) をもって終了としてるから、たとえば echo "cputime\ndata1\ndata2" | ./a.out などとすることは可能。 しかし一体何をしたいんだ? その数値データはテキストファイルに保存されてるの? それなら CPUtime だけを入力して、数値データはそのテキストファイルから読み取ればいいわけだけど。
684 名前:デフォルトの名無しさん [2008/11/12(水) 17:09:50 ] >>680 ラスト10min ありがとう。たすかりました。
685 名前:639 mailto:sage [2008/11/12(水) 17:14:19 ] >>683 <<しかし一体何をしたいんだ? これ、大学の数値実験で出た何百行もの値(SPICEっていう電気回路のCADツールを使って出た値)で、この数値をコピーして、gnuplotでグラフを書きたいんだ。 @SPICEからデータ(数値)をコピーして取り出す。 Aテキストファイルに貼り付ける。 B作成したテキストファイルからgnuplotでグラフを描く。 この一連の作業をプログラムで作りたかったんだ…。 一応数値データも要るので、gnuplotに直接書き込んで終了という訳にもいかず、テキストファイルも残したいんです。
686 名前:デフォルトの名無しさん [2008/11/12(水) 17:29:19 ] すみませんがどなたか>>584 をやって頂けないでしょうか頂けないでしょうか。 >>586 さんのいうとおりisalphaとtoupperを使えばいいのはわかっているんですが、 どうやってそれをソースに書きかえればいいのかまったくわからないので困っています。 今日が締切なのでお願いします。
687 名前:デフォルトの名無しさん mailto:587 [2008/11/12(水) 17:44:51 ] >>587 です 亀ですが>>592 の方ありがとうございました 嫌いと言いながらやってくれる優しさに惚れた また明日結果報告させて頂きます
688 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:46:37 ] 宿題でお聞きしたいのですが…問題は以下のようなものです。 「直行座標系X-Yにより定められている平面上で、0 < X,Y < 1の正方領域をX,Y方向にそれぞれ(n1 - 1)個、(n2 - 1)個に等分割して、その座標を出力する。」 自分で、以下のようなプログラムを作ってみました。 #include<stdio.h> #define n1 7 #define n2 7 int main(){ double X[n1], Y[n2]; int i, j; for(i = 0; i < n1; i++){ *(X + i) = ((1 / (n1 - 1)) * (double)i); } for(i = 0; i < n2; i++){ *(Y + i) = ((1 / (n2 - 1)) * (double)j); } for(i = 0; i < n1; i++){ for(j = 0; j < n2; j++){ printf("(%lf, %lf) ", *(X + i), *(Y + j)); } printf("\n"); } } すると、(0.0000000, 0.0000000)の座標で埋め尽くされてしまいました… 玄人の皆様、お助け下さい…
689 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:53:04 ] >>688 double にキャストする位置がおかしい。 - *(X + i) = ((1 / (n1 - 1)) * (double)i); + *(X + i) = (1.0 / (n1 - 1)) * i; Y も同様。
690 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:53:46 ] >>688 1/(n1 -1) ← 分母分子ともに整数だと、整数の除算が行われるから 1.0/(n1 - 1) とか 1/(n1 - 1.0) とか、どっか double にしないと暗黙の型変換は起こらない あと *(Y + i) = ((1 / (n2 - 1)) * (double)j); ← i でループ回してるんだkら (double)j じゃなくて i だな
691 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 18:08:49 ] >>689 ,>>690 どうもありがとうございます、そういうことなのですか(^^; 皆さんに教わらなければ、多分あと2日くらいは悩んでたと思います。 また質問させて頂く時もあるかと思いますので、その時はまたよろしくお願いします。
692 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 19:05:39 ] [1] 授業単元 プログラミング演習 [2] 問題文: 10個のデータをキーボードから適当に入力し(ランダムなデータ),1次元配列に格納する. バブルソート法により,小さい順に並べ替えるプログラムを作成しなさい. 結果をソートの経過を全てprintfで表示すること. [3] 環境 [3.1] OS:Windows Vista [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年 11月19日 13時 [5] その他の制限: 関数やポインタはまだ習ってないです。よろしくお願いします。
693 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 20:29:20 ] [1] 授業単元:C言語入門 [2] 問題文(含コード&リンク): 0度から360度までのSin(x)の値を文字コード*を使ってグラフを表示するプログラムをC言語で作成せよ。 実行結果の例をアップローダーに貼り付けました。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8012.txt [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2005 [3.3] 言語: C [4] 期限: 2008年11月13日 [5] その他の制限: ファイルの入出力まで習いました。 よろしくお願いします。
694 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 20:30:58 ] >>491 まだ間に合うのかな 風向きとか、スキルとかまだ実装してないけど、イメージとしてこんな感じでよいの? kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8013.txt
695 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 20:35:13 ] >>674 特に指定はされていませんので作りやすいもので結構です
696 名前:694 mailto:sage [2008/11/12(水) 20:56:48 ] >>695 ちょっと改造して、いちおう2個のパラメータとるようにしてみたけど、 やっつけのきたねーコードだw kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8014.txt
697 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 21:24:45 ] >>696 はい、大丈夫です ありがとうございます!
698 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 21:48:47 ] [1] 応用プログラミング演習 [2] wavファイル(音楽ファイル)を読み込んでFFTを施し、バンドパスフィルタをかけてIFFTし、そのwavファイルを出力せよ。(バンドパスの領域は任意) [3] 環境 [3.1] OS: Windows [3.2] 開発環境:VC++ 6.0 [3.3] 言語:C言語 [4]今月中 [5]制限なし ただの授業なのですが、研究で使うレベルのプログラムなのでかなり難しいです↓ ただ原理としては簡単らしいのですが、wavを扱ったことがないのでチンプンカンプンです。 1週間ずっと考え続けても無理でした(ノД`) どなたか手伝ってくれたら嬉しいです。
699 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 21:52:42 ] >>698 >wavファイル(音楽ファイル)を読み込んでFFTを施し、バンドパスフィルタをかけてIFFTし、そのwavファイルを出力せよ。(バンドパスの領域は任意) これだけで作れたらすごいわ
700 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 22:21:42 ] まず、ウインドウ関数を決めないとね。
701 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:00:30 ] >>600 (2)ですけどリスト構造に格納する際に、次数の大きい順にしておいて先頭から順に出力ということはなんとなく分かったのですがそこから進めない・・・
702 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:25:19 ] >>698 どのあたりまでライブラリの使用を認められてるか書け wavファイルの読み取りからやらされるのか?
703 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:38:30 ] [1]情報処理 C [2]組み合わせn Cm を計算する関数を作成しなさい.main関数にてキーボードから2つ?然数n,mを 読み込み後,作成した関数を呼び出しその動作を確認しなさい. 但し,以下の条件を満たすものを作成すること @2つの?然数は1回のscanfで読み込むこと.(データ区切りはスペース) Ascanfはmain関数側に実装すること. B入力はn mの並びにすること. C作成した関数側で「n>=mを満?しない時」,「n,mが?然数ではないとき」は n Cm =0とな るようにしなさい. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年 11月中 [5] その他の制限: Cのいい作り方を思いつきません…
704 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:45:05 ] 4だけ? if (n < m || n < 0 || m < 0) return 0; ってするだけじゃないのか? (自然数に0を含む感じになってます)
705 名前:デフォルトの名無しさん [2008/11/13(木) 00:24:46 ] ∴ ∵ ∴ ∴∵∴ ∴ ∴∵∴∵∴∵∴∵∴∵∴∵∴∴∵ ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵ ∴∵∴∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴ ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵/ ⌒ヽ∴∵∴∵∴ ∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵| | |∴∵∴∵ ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∪ / ノ∴∵∴∵∴∵ .. ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵| ||∵∴∵∴∵ .∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∪∪∴∵∴∵∴∵ .∵∴∵∴∵∴∵∴∵:(・)∴∴.(・)∵∴∵∴∵∴∵∴∵∴∵∴∵∴ ∵∴∵∴∵∴∵∴∵∴/ ○\∵∴∵∴∵∴∵∴∵∴∵∴ ..∵∴∵∴∵∴∵∴∵/三 | 三ヽ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵ . ∴∵∴∵∴∵∴∵ | __|__ │∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵ tanasinn .∵∴∵∴∵∴∵∴∵| === │∵∴∵∴∵∴∵∴∵∴∵∴ .∵∴∵∴∵∴∵∴∵\___/∵∴∵∴∵∴∵∴∵∴∵∴ ..∴∴∵/ ̄.. \∴∵∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴ ∴∵∴/ ,. i ∵∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵ ∴∵∴| /.| |.∵∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵ ∵∴| | :| |.∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴ ∴| | |::| |.∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵ ∴| | |∵U∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴ | | |∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵ / / / ∵∴∵∴∵∴∵∴∵∴∵ ∵ / / / ∴∵∴∵∴ ∴ .しし’ ∵
706 名前:639 mailto:sage [2008/11/13(木) 01:23:09 ] >>639 + >>668 >>681 >>685 なんだけど、レスが無いので分からないorスルーになっているということだとは思いますが((´;ω;`)) 最後に一つだけ質問お願いします。 >>673 の「Ctrl-Dを入力するまで読み取り続けます」なんですけど、「Ctrl+d(コントロールキー+d)」と入力しても「^d」と画面に出力されるだけで書き込みが終了しません。 「コントロール + D(大文字)」、「コントロール + マイナス + D」などなどあり得なさそうな入力も試しましたが、終了しませんでした。 僕は一体どうすれば? アホな質問だったらごめんよぉ(´・ω・`)
707 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 01:24:48 ] >>706 ctrl + z にしてみろ
708 名前:さそり [2008/11/13(木) 01:30:20 ] [1] 授業単元:ファイル読み込み [2] ファイルを読み込んで.hファイルに書き込むのが狙いなんですが sample.txtテキストファイルの中身が kina="mikan"+"momo" shika="hidemaru"*100+"keiko" と50行ぐらい続いていて左辺の値とダブルクオートくくりの 文字を抽出してsample.hに一文字取ったら改行して書き込んでいくのですが どうしたらいいでしょうか??困っておりまして皆様のお力をお借り したいと思っています。どうぞよろしくお願いします。 [3] 環境 [3.1] OS:ソラリス [3.2 [3.3] 言語:C [4] 期限:今週中 [5]
709 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 01:46:00 ] 日本語が謎すぎる!
710 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 01:47:17 ] 今日はあむちゃんあるんですかね
711 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 02:18:46 ] >>699 すみません。。 これ以上どう詳しく書いたらいいのかわかりません(ノД`) >>700 窓関数はなんでもいいです。 おそらくハミングが一番いいのかと思ったのですが… >>702 やり方は自由です。 とにかく動いたらいいのでライブラリの制限はありません。 はい。。wavの読み取りからやらないといけません。 まずそこから躓いています。 wavファイルを一次元配列に格納することはできたのですが(たぶん…)、 それをどう処理すべきかがわかりません。 悪戦苦闘して調べまくったのですが、なかなかできず、ここに助けにもらいに来た次第です。
712 名前:デフォルトの名無しさん [2008/11/13(木) 03:15:24 ] [1]情報処理 C [2]ユーザが調べたい整数n個の数の最小公倍数を求めよ 手順は、もし、ユーザが12と8と9と48のLCMを調べたい時 @LCM(12,8)=24 ALCM(LCM(12,8),9)=LCM(24,9)=72 BLCM(LCM(12,8),9),48)=LCM(72,48)=144 といった形である これを調べたい数を自由に変えることができ、尚且、ユーザが調べたい整数の個数でも対応出来るように作れ [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 今日の23時59分 [5] その他の制限: お願いします
713 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 04:36:55 ] >>712 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8015.c
714 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 06:43:21 ] >>708 その入力例に対する出力の例を書け 日本語そのまま取ると sample.h は m i k a n m o n o h i d e m : になるがよいのか?
715 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 08:40:37 ] 600の(2)の期限せまってるのでどうかお願いします kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8016.txt 似たようなのは見つけたのですが・・・
716 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 10:50:18 ] >>703 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8017.c 一部余分なコードあり(コメントアウトで無効にしてある) パスカルの三角形を使用しているため、階乗で求めるやり方ではない。
717 名前:716 mailto:sage [2008/11/13(木) 10:51:39 ] > n Cm を計算する関数を作成 もしていないんで、適当にnとmを受け継いだら結果を返す仕様に変更してちょっ。
718 名前:587 [2008/11/13(木) 11:01:08 ] >>592 問題なく読み込めました 助かりました、有難うございます!
719 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 11:03:51 ] >>715 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8018.txt
720 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 12:01:00 ] [1] 授業単元:C++ [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8020.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:VS2008 [3.3] 言語:C++ [4] 期限:2008年11月20日まで よろしくお願いします。
721 名前:デフォルトの名無しさん [2008/11/13(木) 12:01:07 ] >>713 hhh.c: In function ‘main’: hhh.c:29: 警告: ignoring return value of ‘realloc’, declared with attribute warn_unused_result というエラーがでました……
722 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 12:11:27 ] >>721 gcc -Wall (チェックが厳しいオプション) でコンパイルしても出て何もこないぞ それにそれはエラーじゃなくて警告
723 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 12:32:33 ] >>708 たぶん違う気がするけど >>714 の通りに1文字1行で出力させるとこうなる #include <stdio.h> int main() { FILE *fp; char *p, buf[256]; int lhs, in_quote; fp = fopen("sample.txt", "r"); if (fp == NULL) { printf("Cannot open sample.txt\n"); return 1; } while(fgets(buf, 256, fp) != NULL) { lhs = 1; in_quote = 0; for(p = buf; *p != '\0'; p++) if (*p == '=') lhs = 0; else if (*p == '"') if (in_quote) in_quote = 0; else in_quote = 1; else if (lhs || in_quote) printf("%c\n", *p); } }
724 名前:デフォルトの名無しさん [2008/11/13(木) 12:35:53 ] なんどもやってるんですが、この表示がでて、この先に進まないんです……
725 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 12:37:18 ] >>724 は>>722 宛
726 名前:デフォルトの名無しさん [2008/11/13(木) 13:23:00 ] [1] 授業単元:C言語 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:Visual C 2008 [3.3] 言語:C [4] 期限:明日まで 七個の文字列の長さ(文字数)をカウントして、文字列とともに表示せよ。 ただし、ポインタを使用して処理すること カウントの仕方がわかりません・・・ お願いします。 例 #include<stdio.h> int main(){ char *name[] ={"Izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada",NULL};
727 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 13:27:10 ] >>726 #include<stdio.h> int main(){ char *name[] ={"Izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada",NULL}; char *p; int i, n; for(i = 0; i < 7; i++){ n = 0; for(p = name[i]; *p != '\0'; p++) n++; printf("%s:%d\n", name[i], n); } return 0; }
728 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 13:27:32 ] >>724 >>722 じゃないが 先に進めないってどういうことだよ? ロードモジュールはできているはずだ。
729 名前:639 mailto:sage [2008/11/13(木) 13:43:00 ] >>707 出来たぅおありがとう!
730 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 13:43:34 ] コンパイルだけして実行してないんじゃないの?
731 名前:デフォルトの名無しさん [2008/11/13(木) 13:49:12 ] >>727 ありがとうございます! *p != '\0'が何を表してるのか教えてくれるとありがたいです!
732 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 13:53:03 ] >>731 文字列の最後=¥0だから それをみている
733 名前:727 mailto:sage [2008/11/13(木) 13:54:39 ] >>731 Cの標準的な約束事で、文字列の配列の最後の文字の次に '\0'(NULL文字)を置くことになっている。 *p != '\0' は、文字の終りに来ていない間繰り返すという意味 *p はポインタ p が指している値(文字)だっていうのはいいんだよね?
734 名前:デフォルトの名無しさん [2008/11/13(木) 14:03:03 ] >>733 丁寧な説明ありがとうございます! '\0'はNULL文字のことなんですね! やっとわかりました。
735 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 14:14:25 ] >>734 それだけかよw
736 名前:デフォルトの名無しさん [2008/11/13(木) 14:26:23 ] >>724 たった今動きました こちらの凡ミスだったようです。申し訳ございません ですが、今度はinput >が限りなく続いて終わらないです…… というより、結果がでてもプログラムが終了しないのです
737 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 16:23:25 ] [1] 授業単元:数値解析 [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8023.txt [3] 環境 [3.1] OS:WindowsXP [3.2] gccなど [3.3] 言語:Cのみ [4] 期限:11月17日まで [5] その他の制限 特に無いですが、角度が45度から増大していく現象の原因が分かれば大丈夫です。 dtの値を小さくすることで誤差は小さくなりますが、ルンゲクッタ法としては おかしい(精度的に)と思うので・・・。よろしくお願いします。
738 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 17:13:59 ] f1=dt*f(X0,v); g1=dt*q(X0,v); f2=dt*f(X0+f1/2.0,v+g1/2.0); g2=dt*q(X0+f1/2.0,v+g1/2.0); f3=dt*f(X0+f2/2.0,v+g2/2.0); g3=dt*q(X0+f2/2.0,v+g2/2.0); f4=dt*f(X0+f3,v+g3); g4=dt*q(X0+f3,v+g3); X0+=(f1+ 2.0*f2 +2.0*f3+ f4)/6.0; v+=(g1+ 2.0*g2+ 2.0*g3+ g4)/6.0;
739 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 17:14:34 ] double q(double X0, double v){ return -g*sin(X0)/l; } double f(double X0, double v){ return v; }
740 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 18:58:45 ] >>712 >>736 >>722 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8025.c 最初に入力する数値の個数を決める仕様に変更。callocを使用。
741 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 19:00:03 ] >>712 >>722 >>736 ttp://www.bohyoh.com/CandCPP/C/Library/calloc.html > その領域は、すべてのビットが0で初期化される。