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/
252 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:03:57 ] >>242 n = 14 くらいまでにしておかないと、とんでもない結果になるよ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7945.txt
253 名前: ◆591LS1rcWk mailto:sage [2008/11/05(水) 16:04:49 ] [1] 授業単元:プログラミング実習 [2] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7944.txt [3] 環境 [3.1] OS: Win vista [3.2] borland C++ 2.31 [3.3] 言語: C [4] 期限: 11月06日14:00まで Rxh(k)=1/n * Σ(n-1,n=0)x[n]*y[n+k]を計算しRxhを1−7出力するプログラムなのですが 完成し、動作を確認した後途中式に用意しておいた二重forループ無いの17行目 printf("%d---%d\n",sum1,sum2); を消すと正常に稼働しなくなります。 原因解決策などお願いします。
254 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:07:35 ] >printf(x[8]={1,2,3,4,5,6,7,8}n); 何これ?
255 名前:246 [2008/11/05(水) 16:28:39 ] >>248 自分もなんといっていいかわからないのですが、246のままのプログラムでは、cosの値が整数のときしか*が表示されません。 でもpaiの値が小数を含んでいるので、cosの値が小数第何位かになってしまうわけです。 かといって、yの刻み幅をかなり小さくしてしまうと大変なことになってしまいます。 cosの値を四捨五入とかできればいいのですが・・・ そういう場合はどのようにすればよいのでしょうか。
256 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:30:21 ] >>254 一番最初に配列の内容を出力しておくこと という条件でした。 情報足りなくてすいません。
257 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:33:07 ] printf("x[8]={1,2,3,4,5,6,7,8}\n");かな?
258 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:55:22 ] #include <stdio.h> int main (void) { float rxh[8]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; int x[8]={1,2,3,4,5,6,7,8}, h[8]={8,7,6,5,4,3,2,1}; int sum1=0,sum2=0,n=8,k,y,z; printf("x[8]={1,2,3,4,5,6,7,8}\n"); printf("h[8]={8,7,6,5,4,3,2,1}\n"); k=0; y=n-1; z=n-k; for(k=0;k<y;k++,z--){ for(n=0;n<z;n++){ sum1 = x[n] * h[n+k]; sum2 += sum1; //printf("%d---%d\n",sum1,sum2); } rxh[k] = (float)sum2/8.0; printf("Rxh[%d]=%2.3f\n",k+1,rxh[k]); sum2=0; } return(0); }
259 名前: ◆591LS1rcWk mailto:sage [2008/11/05(水) 16:58:51 ] リンク先の方を見ると何故か色々欠けているみたいなのでこっちに張り直します。 #include <stdio.h> int main (void) { float rxh[8]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; int x[8]={1,2,3,4,5,6,7,8}, h[8]={8,7,6,5,4,3,2,1}; int sum1=0,sum2=0,n=8,k,y,z; printf("x[8]=[1,2,3,4,5,6,7,8]\n"); printf("h[8]=[8,7,6,5,4,3,2,1]\n"); y=n-1; z=n-k; for(k=0;k<y;k++,z--){ for(n=0;n<z;n++){ sum1 = x[n] * h[n+k]; sum2 += sum1; printf("%d---%d\n",sum1,sum2); } rxh[k] = (float)sum2/8; printf("Rxh[%d]=%2.3f \n",k+1,rxh[k]); sum2=0; } return(0); }
260 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 17:16:18 ] >>258 気づきませんでした。ありがとうございます。 修正して下さった点は k=0;の初期化とrxh[k] = (float)sum2/8.0;の8だった部分を8.0にで合っていますか?
261 名前:213 mailto:sage [2008/11/05(水) 17:53:35 ] >>214 返すのが遅れてすいません。どうもありがとうございます。 一晩考えたのですが… #include <stdio.h> int main() { int a[3][3]; int b[3][3]; int c[3][3]; int i, j, k; scanf_s("%d %d %d %d %d %d %d %d %d", &a[0][0],&a[0][1],&a[0][2],&a[1][0],&a[1][1],&a[1][2],&a[2][0],&a[2][1],&a[2][2]); scanf_s("%d %d %d %d %d %d %d %d %d", &b[0][0],&b[0][1],&b[0][2],&b[1][0],&b[1][1],&b[1][2],&b[2][0],&b[2][1],&b[2][2]); for(i=0; i<3; i++) { for(j=0; j<3; j++) { for(k=0; k<3; k++) { c[i][j] += a[i][k] * b[k][j]; } printf("%d, " ,c[i][j]); } printf("\n"); } } とするととんでもない数字が表示されます。
262 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 18:03:04 ] int c[3][3] = {0};
263 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 18:26:59 ] cを全部0で初期化しないとね。
264 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 18:44:48 ] [1] 授業単元:プログラミング演習 [2] @12個のデータを入力できる1次元配列(int型)を準備し、 キーボードから各自 適当な数字(int型の範囲)を12個入力する. 入力したデータは,準備した配列に格納される. 12個のデータの最大値と最小値を表示するプログラムを作成しなさい. A12個のデータを入力できる2次元配列(int型 3行4列)を準備し, キーボードから各自 適当な数字(int型の範囲)を12個入力する 入力したデータは,準備した配列に格納される. 12個のデータの最大値と最小値を表示するプログラムを作成しなさい. [3] 環境 [3.1] OS windows Vista [3.2] コンパイラ名:gcc [3.3] 言語: C [4]11月12日 13:00まで [5]その他制限:if文、for文、配列などは習いましたが、それ以上はまだ習っていません。よろしくお願いします。
265 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 19:36:54 ] >>262 ,263 できました。どうもありがとうございます。
266 名前:デフォルトの名無しさん [2008/11/05(水) 19:49:16 ] 239をどなたかお願いします。
267 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 20:00:44 ] >>239 の言ってる意味が分からないんだけど。 argc, argv をどうしたいの? 何の下位バイトを出力するの?
268 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 20:12:49 ] [1] 授業単元: C言語入門 文字処理の簡単な演習課題 [2] 問題文(含コード&リンク): 適当な1文字を入力し、それが元が何であったかが分からないように何文字かずらして暗号化し、また元に戻すようなプログラムを作りなさい。文字としては英字小文字のみと仮定します。 例を以下に示します。作成するプログラムも同じような出力形式にしてください。 [ 例 ] 入力文字 = x 暗号化された文字 = b 復号化された文字 = x 何文字ずらすか?については、各自で適当に設定して構いません。 ただし、暗号化された文字も、英字小文字でなければなりません。例えば、zに2を足すと、そのままでは英字でない記号になってしまいますが、これを z+1 -> a, z+2 -> b, z+3 -> c, … のようにアルファベットの先頭に戻してやる処理が必要です。 この点を工夫して下さい。 [3] 環境 [3.1] OS:Windows XP [3.2] Visual C++ 2005 [3.3] C++ [4] 期限:11月6日23時まで [5] その他の制限: Char型変数を使うのはわかるのですがそれからがよくわからなくて・・・。 初歩的なことですみませんが、よろしくお願いします。
269 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 20:15:06 ] >>239 #include <stdio.h> #include <limits.h> #include <stdlib.h> union UNION { int i; unsigned char ch[8]; }; void f(unsigned char c) { unsigned char i; for (i = (1 << (CHAR_BIT - 1)); i != 0; i >>= 1) { if ((c & i) != 0) putchar('1'); else putchar('0'); } } int main(int argc, char *argv[]) { union UNION obj; obj.i = 0; if (argc > 1) obj.i = atoi(argv[1]); printf("%d\n", obj.i); f(obj.ch[1]); putchar(' '); f(obj.ch[0]); return 0; } よくわからないとこは適当に判断させてもらった
270 名前:デフォルトの名無しさん [2008/11/05(水) 21:00:23 ] [1] 授業単元: C言語応用 [2] 問題文(含コード&リンク): テキストファイル CD_DATA|45 DVD_DATA|601 MD_DATA|24 メイン関数と読み込み関数で、テキストファイルの'|'より後ろを構造体に書き込み エラー処理でテキストファイルに'|'が無い時エラーメッセージをだす。 テキストファイルの中の行数が違った時エラーメッセージをだす。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: [3.3] C [4] 期限:11月6日15時まで
271 名前:デフォルトの名無しさん [2008/11/05(水) 21:00:39 ] >>269 さん どうもありがとうございます。
272 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 21:44:12 ] >>268 offsset は -26 〜 26、入力文字 in の範囲チェックはどっかでやっておく int offset = 3; char in, en, de; in = getchar(); /* 暗号化 */ en = (in - 'a' + offset + 26) % 26 + 'a'; /* 復号 */ de = (en - 'a' - offset + 26) % 26 + 'a'; printf("入力文字 = %c\n暗号化された文字 = %c\n復号された文字 = %c\n", in, en, de);
273 名前:デフォルトの名無しさん [2008/11/05(水) 22:14:22 ] 宿題への助言をお願いします。 内容は、入力された整数列を文字型配列で読み込み、その整数を以下のような変換規則に従い出力するというものです。 0→D、1→f、2→k、3→E、4→y、5→Q、6→R、7→e、8→B、9→t 以下は作ってみたものとなります。出力結果が文字化けしてしまいます… #include<stdio.h> #include<string.h> #define N 50 int main(){ int i, j; char num[N], txt[N]; printf("%d個までの整数列を入力して下さい : ", N); scanf("%s", &num); for(i = 0; i < strlen(num); i++){ for(j = 0; j < 10; j++){ if(num[i] == 'j') txt[i] = "DfkEyQReBt"[j]; } } printf("\n整数列を変換した文字列は「"); for(i = 0; i < strlen(num); i++){ putchar(txt[i]); } printf("」です。\n"); return 0; }
274 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 22:24:23 ] >>273 scanf("%s", &num); --> scanf("%s", num); & をトル if(num[i] == 'j') --> if(num[i] = j + '0') 'j' という文字と比べてどうすんの 以上。
275 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 22:30:26 ] >>274 どうもです。コンパイル通りました(^^ とっても初心者なので、「j + '0'」とするのがどうも理解しにくいところですが…(^^; あと、sage忘れスマソ
276 名前:14 mailto:sage [2008/11/05(水) 22:34:32 ] >>16 ありがとうございます。先頭のセルの削除と解放ができました。 すべてのセルを削除すると同時に連結リストの先頭と2つ目に追加したセルの領域を解放する関数って どう書けばいいんですか? void *delete_all(struct cell *head) { struct cell * next; if(head == NULL){ return NULL; } while(next !=NULL){ next = head->next; } free(head); } whileでnextをセルの終わりまで飛ばして、削除しようと考えたのですが領域の解放の部分が分かりません。
277 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 22:51:42 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7947.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: [3.3] C [4] 期限:11月8日 よろしくおねがいします。
278 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 22:52:31 ] >>275 '0' は ASCII コードで 48 という整数値に対応する。 '1' は ASCII コードで 49 だから '0' + 1 と表せる。 同様に、'2', '3', ..., '9' は '0' + 2. '0' + 3, ... , '0' + 9 となる。
279 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:04:20 ] >>272 できました。 本当に助かります。ありがとうございました
280 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:12:41 ] 『2つの文字列をポインタ変数pxとpyを使って入力し、 pxとpyの文字列を結合した文字列を他のポインタ変数に記憶し、 その結果を出力するプログラム』 を作れという課題なのですが、うまく動作してくれません。 誤ってる部分等、目につきましたら助言お願いします。 #include<stdio.h> #define N 10 int main(){ char *px,*py,*pz,x[N+1],y[N+1],z[N+(N+1)]; /*最大N文字まで入力可としたいので、N+1個分の配列を用意*/ px=x; py=y; pz=z; printf("2つの文字列を入力してください。(ただし、各々最大%d文字まで)\n",N); printf("1つ目の文字列 >"); scanf("%s",px); printf("2つ目の文字列 >"); scanf("%s",py); /* pxとpyの文字列をpzに記憶させる部分 */ while(*pz++ = *px++) ; pz--; while(*pz++ = *py++) ; printf("%s\n",pz); return(0); } /*以下、出力結果 2つの文字列を入力してください。(ただし、各々最大10文字まで) 1つ目の文字列 >yamada 2つ目の文字列 >tarou フフフフフフフフフフフフフフフフフフフフtarou */
281 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:15:38 ] >>280 printf("%s\n",pz); ↓ printf("%s\n",z);
282 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:18:01 ] printf()の時点でpzがどこを指してるか考えてみよう
283 名前:280 mailto:sage [2008/11/05(水) 23:18:50 ] >>281 出来ました。ありがとうございます。こんなにあっさり・・・。 すみません、どうして、pzではまずいんでしょうか?
284 名前:281 mailto:sage [2008/11/05(水) 23:20:21 ] >>283 >>282 の通りだけど、 pz--; これをできているんだからもう少し考えればいけるさ。
285 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:21:53 ] 文字列操作関数使えば瞬殺だったりして
286 名前:280 mailto:sage [2008/11/05(水) 23:30:55 ] >>283 >>284 解決しました。ありがとうございました。
287 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:35:15 ] >>264 1問目あがり。 全角スペースは適当に置き換えてちょ。 #include<stdio.h> #define N 12 int main() { int i, array[N]; int max, min; for( i = 0; i < N; i++ ) scanf( "%d", &array[i]); /* とりあえず0番目の要素を最大値,最小値として設定し, それ以降の要素と比べる */ max = min = array[0]; for( i = 1; i < N; i++ ) { if(max < array[i]) max = array[i]; if(min > array[i]) min = array[i]; } printf( "Max: %d\nMin: %d\n", max, min); return 0; }
288 名前:デフォルトの名無しさん [2008/11/05(水) 23:45:19 ] exeファイルの中身、C++でプログラミングした文章は、 exeファイルから知ることはできないのでしょうか?
289 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:55:03 ] >>288 なんとなくはできるよ 逆アセンブルすりゃいいじゃん したらばニモニックが登場して そこからアセンブリを割り出せばいい さらにそのあと好きな高級言語に翻訳
290 名前:デフォルトの名無しさん [2008/11/05(水) 23:58:49 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7948.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: [3.3] C [4] 期限:11月6日 朝7時 [5] その他の制限:出来るだけ簡単に! よろしくおねがいします!!!
291 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 00:17:02 ] >>278 ありがとうございます、すっきりしました(^^
292 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 00:24:37 ] 245をお願いします
293 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 00:27:32 ] >>288 ソースコードを知るのか、例えばアドベンチャーゲームのような、実行ファイルに含まれる 文章を知るのかによってかわるかな。
294 名前:デフォルトの名無しさん [2008/11/06(木) 01:08:14 ] [1] 授業単元: ループと条件分岐 [2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。xの範囲は[0, 4π]です。 縦をy軸と見立てます。使うのは条件分岐のif、ループ、putcharです。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 夜が明けるまで [5] その他の制限: 今はループと条件分岐のifまで習っています。使うのは条件分岐とループ、putcharです。 初めて書き込みします。特に難しいことは必要としないとは言っていましたが、自分には難しすぎます。 どうかよろしくお願いします。
295 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:14:05 ] >>276 , >>14 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7950.txt
296 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:28:06 ] >>294 横80文字縦20行としてとりあえず。上下非対称だがその辺は丸め誤差のせいにして。 #define WIDTH 80 #define HEIGHT 20 #define PI 3.14159265358979 int x, y; int c[WIDTH]; for(x = 0; x < WIDTH; x++) c[x] = (cos(4 * PI / WIDTH * x) + 1)* HEIGHT/2; for(y = 0; y <= HEIGHT; y++){ for(x = 0; x < WIDTH; x++) if(c[x] == HEIGHT - y) putchar('*'); else putchar(' '); putchar('\n'); }
297 名前:296 mailto:sage [2008/11/06(木) 01:30:01 ] >>296 配列習ってないんだったら if(c[x] == の部分の c[x] を cos(4*PI/WIDTH * x) + 1)*HEIGHT/2 に置き換える。すると最初の for(x = 0; は不要。
298 名前:296 mailto:sage [2008/11/06(木) 01:33:10 ] と思ったけど、暗黙のキャスト使ってるから一度 int の配列に入れておくのが吉かも。
299 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:38:35 ] >>295 全然トリッキーじゃなかった。 struct cell *next, *curr; for (curr = head, next = NULL ; next = curr->next, curr != NULL; curr = next) { free(curr); } せめてこうだったわ。半日修行してくる。
300 名前:294 [2008/11/06(木) 01:48:40 ] >>296 配列習ってないので、c[x]を置き換えてやってみたんですけど、何かうまくいきませんでした。 どうすればよいでしょうか。 あと「横80文字縦20行とする」ってどういうことですか。
301 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:49:08 ] >>290 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7952.txt
302 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:49:11 ] >>264 2問目あがり。全角スペースは適当に置き換えてちょ。簡単に、簡潔にかいたつもり。 #include <stdio.h> #define X 4 /* X,Yの値を交換しても動くから好きにしてちょ */ #define Y 3 int main(void) { int i, j, max, min, array[X][Y]; for( i = 0; i < X; i++ ) for( j = 0; j < Y; j++ ) scanf( "%d", &array[i][j]); max = min = array[0][0]; for( i = 0; i < X; i++ ) { for( j = 0; j < Y; j++ ) { if(max < array[i][j]) max = array[i][j]; if(min > array[i][j]) min = array[i][j]; } } printf( "Max: %d\nMin: %d\n", max, min); return 0; }
303 名前:301 mailto:sage [2008/11/06(木) 01:51:23 ] 問2の3行目は#include <string.h>だorz
304 名前:294 [2008/11/06(木) 02:08:21 ] 自分でもプログラムを組んでみたんですが、これから何とかなりませんか。 自分の組んだのだと、一つしか表示されません。 #include<stdio.h> #include<math.h> int main(){ double x, y, pai=3.14; for(y=1; y>=0; y=y-0.1){ for(x=0; x<=pai/2; x=x+0.1){ if(y==cos(x)){ putchar('*'); } else{ putchar(' '); } } putchar('\n'); } return 0; }
305 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:19:51 ] y==cos(x) 幅を持たせろ、なんで一致するとおもったんだ?
306 名前:294 [2008/11/06(木) 02:22:03 ] 幅を持たせるって、どういうことですか?
307 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:23:47 ] yが0.1刻みなのにぴったり一致するわけないだろ?
308 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:27:23 ] #include <stdio.h> #include <math.h> int main(){ double x, y, pai=3.14; for(y=1; y>=-1; y=y-0.1){ for(x=0; x<= 4 *pai; x=x+0.1){ if(y - 0.05 < cos(x) && cos(x) <= y + 0.05){ putchar('*'); } else{ putchar(' '); } } putchar('\n'); } return 0; } 答えわたしとけばいいんじゃね?
309 名前:294 [2008/11/06(木) 02:28:13 ] でも刻み幅を細かくしすぎたら、画面に収まりきらないと思うのですが・・・ そういう場合はどうすればよいでしょうか。
310 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:32:01 ] >>301 おお! あざーっす!!
311 名前:294 [2008/11/06(木) 02:32:57 ] 本当にありがとうございました。 自分の知識が足りず、申し訳ありませんでした。
312 名前:301 mailto:sage [2008/11/06(木) 02:39:00 ] >>277 #include <math.h>を足して 関数のプロトタイプ宣言して #define next(x) (((x)+1% (Q_SIZE+1)) ↓ #define next(x) ((x+1) % (Q_SIZE+1)) 関数enqueue内の return 0; の前に rear = next(rear); 足して ○○○1つ目 enqueue(n) == -1 ○○○2つ目 (n=dequeue()) == -1 viewqueueは printf("末尾(長さ:%d)\n", abs(front-rear));
313 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:39:31 ] 名前消すの忘れた(´・ω・`)
314 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:54:41 ] Cで以下のような関数を作りたいのですが、可能でしょうか? 可能ならば、どのように実装すればよいのか教えてください。 int myrand(int Max, int N, int prob) 0からMaxまでのランダムな整数を返しますが、 probの確率でNを返してくれるような関数です。 例えば、myrand(100, 10, 50)は50%で10を返しますが、 それ以外は1〜100までランダム、という具合です。
315 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 03:03:44 ] >>314 それ以外は1〜100までランダム 10は含むのか?
316 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 03:12:50 ] if( (double)rand()/RAND_MAX < prob ) return N; else return (int)(rand()*(Max+1.0)/(1.0+RAND_MAX));
317 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 04:12:38 ] >>316 probを100で割るか左辺を100倍しないと
318 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 09:54:40 ] [1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): 10進数⇔16進数の変換プログラムを作成せよ -10進⇒16進か16進⇒10進かを最初に選択 -変数はint型で 実行例 10進⇒16進なら1,16進⇒10進なら2を入力してください: 1 ↓ 10進数を入力してください: 1000 ↓ 入力した数は16進数で 3e8 です. 10進⇒16進なら1, 16進⇒10進なら2を入力してください: 2 ↓ 16進数を入力してください: f86a ↓ 入力した数は10進数で 63594 です. [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年11月10日(月)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子は習いました。 お願いします。
319 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 10:02:27 ] >>318 strltolは使っちゃだめな課題っぽいけどそうなんだよね?
320 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 10:21:18 ] >>318 そうですね。 strltolは使わないでお願いします。
321 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 10:22:38 ] >>319 そうですね。 strltolは使わないでお願いします。
322 名前:デフォルトの名無しさん [2008/11/06(木) 10:46:05 ] >>318 #include <stdio.h> int main(void) { int i, n; printf("10進⇒16進なら1, 16進⇒10進なら2を入力してください: "); scanf("%d", &i); switch(i) { case 1: printf("10進数を入力してください: "); scanf("%d", &n); printf("入力した数は16進数で %x です\n", n); break; case 2: printf("16進数を入力してください: "); scanf("%x", &n); printf("入力した数は10進数で %d です\n", n); break; } return 0; }
323 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 11:47:27 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7953.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:c [4] 期限:11/10 [5] その他の制限:とくになし よろしくおねがいします
324 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 12:07:30 ] >>323 int kaibun(char str[]){ { int i, n; /* 終端文字 \0 または \n までの文字数を数える */ for(n = 0; str[n] != '\0' && str[n] != '\n'; n++); /* 先頭からの文字と末尾からの文字でひとたび違ったら即 0 を return */ for(i = 0; i < n; i++) if(str[i] != str[n - i - 1]) return 0; /* 最後まで return 0 されなかったら 1 を return */ return 1; }
325 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 12:11:06 ] for(i = 0; i < n; i++) は for(i = 0; i < n/2; i++) で十分だったな
326 名前:738 [2008/11/06(木) 12:23:09 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 入力した文字の先頭と最後の文字を出力する。 ”終わり”と入力すればプログラム終了。 [3] [3.1] OS:linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C言語 [4] 期限: 2008年11月8日までお願いします。 [5] その他の制限: scanfを使うのではなくgetcharを使用
327 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 13:23:19 ] >>326 マルチバイト文字の処理を要求しているのか
328 名前:324 mailto:sage [2008/11/06(木) 13:28:33 ] >>323 例文よく見てなかった。大文字小文字は区別しないのな 制限なしってことだから、ctype.h の tolower 使って書き換える if(str[i] != str[n - i - 1]) ↓ if(tolower(str[i]) != tolower(str[n - i - 1]))
329 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 13:33:00 ] >>252 ありがとうございました!
330 名前:324 mailto:sage [2008/11/06(木) 14:35:12 ] 何度もすまん。空白も無視しないとダメなんだな int kaibun(char str[]) { int i, n; char buf[MAX_SIZE]; /* 終端文字 \0 または \n までの文字数を数えて空白を除いて buf にコピー */ for(i = 0, n = 0; str[i] != '\0' && str[i] != '\n'; i++) if(str[i] != ' ') buf[n++] = str[i]; /* 先頭からの文字と末尾からの文字でひとたび違ったら即 0 を return */ for(i = 0; i < n; i++) if (tolower(buf[i]) != tolower(buf[n - i - 1])) return 0; /* 最後まで return 0 されなかったら 1 を return */ return 1; }
331 名前:123 mailto:sage [2008/11/06(木) 16:34:15 ] >>123 をお願いできないでしょうか?
332 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 18:49:14 ] >>324 なんども申し訳ありません ありがとうございます!
333 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 18:58:02 ] >>322 本当に有難う御座いました。 大変助かりました。
334 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:40:49 ] お願いします [1] 配列 [2] 下に示す行列の積を求めて表示するプログラムを作りなさい。 int x[2][3]={{1,2,3},{4,5,6}} int y[3][2]={{1,5},{5,3},{8,1}} 実行結果 35 14 77 41 問 [3] 環境 [3.1] XP [3.2] VC 6.0 [3.3] 言語:C [4] 期限:明日まで
335 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:59:36 ] >>331 #include <string> #include <iostream> class Fish {}; class Wakana : public Fish{ protected: std::string name; public: Wakana() : name("ワカナ") { }; void show() { std::cout << name << std::endl; }}; class Tsubasu : public Wakana { protected: std::string name; public: Tsubasu() : name("ツバス") { } void show() { std::cout << Wakana::name << "→" << name << std::endl; }}; class Inada : public Tsubasu { protected: std::string name; public: Inada() : name("イナダ") { } void show() { std::cout << Wakana::name << "→" << Tsubasu::name << "→" <<name << std::endl; };}; class Hamachi : public Inada { protected: std::string name; public: Hamachi() : name("ハマチ") { }; void show() { std::cout << Wakana::name << "→" << Tsubasu::name << "→" << Inada::name << "→" << name << std::endl;}}; class Buri : public Hamachi { protected: std::string name; public: Buri() : name("ブリ") { }; void show() {std::cout << Wakana::name << "→" << Tsubasu::name << "→" << Inada::name << "→" << Hamachi::name << "→" << name << std::endl;}}; int main(){Buri().show(); return 0;}
336 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 20:08:41 ] 入出力関数は?
337 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:02:39 ] 題意がいまいち分からないので継承元の文字列を継ぎ足していく感じに kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7954.cpp クラス名がinabaになっちゃった.
338 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:05:41 ] >>334 上の方に行列の課題なかったか? int ans[2][2] = {0}; int i, j, k; for(i = 0; i < 2; i++) for(j = 0; j < 2; j++) for(k = 0; k < 3; k++) ans[i][j] += x[i][k]*y[k][j]; for(i = 0; i < 2; i++){ for(j = 0; j < 2; j++) printf("%d ", ans[i][j]); printf("\n"); }
339 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:12:34 ] [1] 授業単元: 配列を用いた計算 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7955.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:11月10日12:00まで [5] その他の制限: 構造体を利用することになっています。 構造体のメンバーは 行のサイズ unsigned int 列のサイズ unsigned int 行列のデータへのポインタ double ** で構成するものとする。 と指定されています。 よろしくお願いします。
340 名前:334 mailto:sage [2008/11/06(木) 21:31:54 ] >>338 ありがとうございます
341 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 23:13:24 ] >>316 , 317 ありがとうございます。 >>315 Maxはある程度大きく、それ程厳密な確率を求めているわけではないですので、 316さんの実装で十分です。
342 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 00:17:42 ] [1] 授業単元: ポインタ配列 [2] 問題文(含コード&リンク): #include <stdio.h> int main(void) { char ??? = { "1.振り込み", "2.預け入れ", "3.残高照会", "4.通帳記録", "5.終了", ??? }; char ???p; p = menu; while(*p){ printf("???\n",???); } 上記の???の場所を適切に埋め、動作を確認する。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VC6.0 [3.3] 言語: C++ [4] 期限: [2008年11月07日10:00まで] [5] その他の制限: よろしくお願いします。
343 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 00:34:56 ] #include <stdio.h> int main(void) { char *menu[] = { "1.振り込み", "2.預け入れ", "3.残高照会", "4.通帳記録", "5.終了", NULL, }; char **p; p = menu; while(*p){ printf("%s\n", *(p++)); } return 0; }
344 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 00:37:17 ] >>343 動作確認しました。 ありがとうございます! 助かりました。
345 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 01:05:48 ] [1] 授業単元: C [2] 問題文: (1)自然数nの正の約数が6個あり(1及びn自身を含めて) それらの総数の和が532である時のnの値を求めるプログラム。 (2) nを2桁の偶数としn^2の下2桁がnと同じ時、nの値を求めるプログラム。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: [11月7日8:00まで] [5] その他の制限: 特になし (2)については答えが76と分かっているのですが (1)についてはさっぱりなんです…
346 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 01:55:20 ] >>345 (1) #include<stdio.h> int main() { int n, c, a, s; for (n = 1; ; n ++) { c = s = 0; for (a = 1; a <= n; a ++) { if (n % a == 0) { c ++; s += a; } } if (c == 6 && s == 532) { printf("%d\n", n); break; } } return 0; }
347 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 01:55:57 ] >>345 すごい力まかせ、最適化の余地あり void main(){ int count ; int buff[6] ; for ( int i = 1 ; i < 532 ; i++ ){ count = 0 ; for ( int j= 1 ; j <= i ; j++ ){ if(i%j==0){ buff[count] = j ; count++ ; if ( count >= 6 ){ break ; } } } if ( count == 6 && buff[5]==i){ if( buff[0] + buff[1] + buff[2] + buff[3] + buff[4] + buff[5] == 532 ){ printf ( "%d\n", i ) ; break ; } } } }
348 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 02:07:12 ] (2) #include <stdio.h> int main(void) { int n, tmp; for(n=10; n<100; n+=2){ if(n == n*n%100) break; } printf("%d\n", n); return 0; }
349 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 04:36:24 ] >>339 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7956.c 動作確認はあまりしてない。とりあえず動く程度。分割コンパイルは適当に。
350 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 04:51:50 ] >>339 同じ学校だね。
351 名前:デフォルトの名無しさん [2008/11/07(金) 06:11:38 ] 突然すみません。getsで何も入力しなかった場合に特定の処理をしたいのですが、 下のif(a==NULL)が動作しないです。どう書けばいいか教えて下さい。 int main(){ char a[256]; gets(a); if(a==NULL){ printf("何か入力して下さい"); } puts(a); } 宜しくお願いします。
352 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 06:41:13 ] a[0]=='\0'