1 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 22:55:25 ] あなたが解けない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++の宿題を片付けます 102代目 pc11.2ch.net/test/read.cgi/tech/1197132472/
162 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 16:47:01 ] 文字列が入力されるまで長さがわからないなら、事前にその文字数分確保する方法はないだろ。 多目に確保するのがどうしてもイヤならリストにでもしろよw
163 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 17:09:18 ] >>161 scanfを使わない
164 名前:デフォルトの名無しさん [2008/01/17(木) 18:10:39 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク):整数をm個入力してソートし、その後(2分)検索をn回行うプログラムを作りなさい(mとnは入力して決める)。ただし、できるだけポインタを利用した関数を作成して用いなさい。 [3] 環境 [3.1] OS: (Windows Vista) [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: (C) [4] 期限: [2008年1月18日12:00まで] [5] その他の制限: お願いします。
165 名前:デフォルトの名無しさん [2008/01/17(木) 18:18:26 ] >>161 多めに確保して、改めてmallocで宣言するくらいだな。
166 名前: ◆cPUZU5OGFs mailto:sage [2008/01/17(木) 18:56:26 ] 前スレ986の2分木の者です。 何とか解決出来たので>>143 のリストから削除お願いします。 もし取り掛かってる方いましたらありがとうございました。
167 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 19:53:12 ] コンパイルは通るのですが、「メモリが"written"になることはできませんでした」というエラーが出てばっかりで、やりきれない気持ちでいっぱいになりました。 forループと複雑な計算を大量にしていると起こりやすい気がするのですが、その場合に考えられる特定の原因ってありますか?
168 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 19:56:50 ] ポインタじゃねえの?
169 名前:デフォルトの名無しさん [2008/01/17(木) 19:59:44 ] [1] 授業単元: プログラミング1 [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5790.txt [3] 環境 [3.1] OS: Windows、Unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 2008年1月17日21:00まで [5] その他の制限: 図があるためリンクを押すとzipを開くようになっています。 問題と図は無題.bmpです。ウイルスではありません。 お願いします。
170 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 19:59:52 ] >>168 試しにforループ内のiを逐一表示してみたのですが、i++なのに何故か途中でとんでもない数字に飛んだりします。 ポインタの扱いを間違っているって事ですか?
171 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:00:11 ] >>167 文章は読めたのですが、「こいつは一体何がいいたいんだ?」という疑問が出てばっかりで、 やりきれない気持ちでいっぱいになりました。 ソースを晒せばすぐに原因が分かる気がするのですが、それをしない特定の理由ってありますか?
172 名前:デフォルトの名無しさん [2008/01/17(木) 20:00:19 ] >>169 すみません、URLをまちがえました
173 名前:デフォルトの名無しさん [2008/01/17(木) 20:01:11 ] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5790.zip
174 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:09:58 ] >>142 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5791.cpp
175 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:17:50 ] >>169 #include <stdio.h> #include <stdlib.h> int route(int m, int n) { if (m == 1 || n == 1) return 1; else return route(m - 1, n) + route(m, n - 1); } int main(int argc, char *argv[]) { if (argc != 3) return 1; int m = atoi(argv[1]), n = atoi(argv[2]); printf("%d", route(m, n)); return 0; }
176 名前:デフォルトの名無しさん [2008/01/17(木) 20:23:58 ] >>175 実行してみたのですがなにも起こりませんでした・・・
177 名前:167 mailto:sage [2008/01/17(木) 20:26:46 ] >>171 やりきれない気持ちにさせてしまい申し訳ありません。私が分からないだけでよくある話かと思い、気軽に質問してしまいました。反省します。 プログラムが変な挙動をして強制終了する部分は下リンク先の大きなforループ内です。iが100を超えた瞬間にpointnの数値がオーバーフローします。プログラム自体は3ファイルに分かれていて長いので、ここに原因がなければ諦めます。 [1] 授業単元: 応用プログラミング [2] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5792.txt [3] 環境 [3.1] OS: windowsXP [3.2] gcc32 [3.3] cpp
178 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:31:59 ] >>177 症状が再現する最小のソースを示すのが礼儀だぞ。 widthやheightがどんな値を取るかもわからないでどうして答えられると思う?
179 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:34:28 ] なんでiが100超えるん?
180 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:36:16 ] >>179 ばっふぁおーばーふろー があれば簡単さw
181 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:36:50 ] >>176 引数に1以上与えればなんか出るはずなんだがな
182 名前:デフォルトの名無しさん [2008/01/17(木) 20:40:12 ] >>181 すみません、こちらのミスでした。 ちゃんと実行できました。 ありがとうございました
183 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:42:47 ] >>179 バッファオーバーフローのテスト コンパイラが自動変数をどこに配置するかによっても結果が変わるので 必ずしも何かが起こるとは限らない /* 最適化をオフにしてコンパイルしてね */ #include <stdio.h> int main(void){ int x=123; int y[1]={456}; int z=789; printf("x=%d z=%d\n", x, z); y[1]=0; printf("x=%d z=%d\n", x, z); return 0; }
184 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:47:55 ] point[100]なんだからiが100になっちゃいかんだろ。
185 名前:183 mailto:sage [2008/01/17(木) 20:50:44 ] >>177 i が pointn の数値以上になるということは //後略 の部分に問題がある可能性が高いよ >>179 ごめん勘違いしてた
186 名前:167 mailto:sage [2008/01/17(木) 20:52:22 ] >>178 最小に纏め上げるのが困難なもので…。 >>184 それでした。直した結果完璧に動きます。恥ずかしすぎる…。 みなさんご迷惑おかけしました。すれ汚しすみません。ありがとうございました。
187 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:59:58 ] 別にまとめる必要すらないだろ。 まあ大方、全体を見せたくないとか言うんだろうが
188 名前:デフォルトの名無しさん [2008/01/17(木) 21:13:50 ] >>167 pointn = (int)((rand()/(double)(RAND_MAX+1.0f))*100);//コア数 これだろ、、おかしいの。
189 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 21:19:01 ] >>174 文字列の式は固定ではなく、手動での入力なのです・・・。 自分の説明が不足していました、すみません。 あげていただいたプログラムを参考に、自分でももう少し頑張ってみます。
190 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 21:23:10 ] >>188 それ自体は0-99の乱数を発生させるだけで、おかしくなくね? キャストはなくてもいいけど、あってまずいもんでもないし。
191 名前:デフォルトの名無しさん [2008/01/17(木) 21:33:53 ] >>190 ぉぉぅ、たしかに普通に見間違えた。 >>167 なんでもないから>>188 は普通にスルーしてくれ。 かき乱してすまん。
192 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 21:34:26 ] これだから情報を小出しにする奴は嫌いだ。。 どうせ原因は他にあるのに。
193 名前:デフォルトの名無しさん [2008/01/17(木) 21:39:10 ] 自分でここに原因があるって思って見つけられないときは 大方別のところに原因がある。 長かろうが短かろうが、主題さえはっきりしてれば別段読み解くのは難しくない。 てことで>>167 ソースplz
194 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 21:41:21 ] もう終わってるんだけどw
195 名前:デフォルトの名無しさん [2008/01/17(木) 23:56:16 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5794.txt [3] 環境 [3.1] OS:Windows xp [3.2] コンパイラ名とバージョン:VisualStudio2005 [3.3] 言語: C [4] 期限:1月22日 [5] その他の制限: 特にないです
196 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:07:14 ] 【時間切れ】 (1/17) >>151 【未解決問題】 >>164 1/18 12:00 >>142 1/18 >>172 (手動入力) pc11.2ch.net/test/read.cgi/tech/1199515728/824 1/18 >>86 1/22 >>195 1/22 pc11.2ch.net/test/read.cgi/tech/1199515728/229 1/31 >>79 無期限 >>144 無期限 問題文>>148
197 名前:デフォルトの名無しさん [2008/01/18(金) 00:07:39 ] >インターネット上でファイルの転送に利用されるプロトコルは?(20点) >[1] FTP, [2] POP, [3] PPP, [4] SMTP << 1 >正解です。 これってPOP&SMTPもファイル転送で使わね?添付ファイルてきな意味で。
198 名前:デフォルトの名無しさん [2008/01/18(金) 00:13:10 ] >>144 は最小二乗法の式作ってとくところからだな
199 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:24:39 ] >>197
200 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 07:26:58 ] >>pc11.2ch.net/test/read.cgi/tech/1199515728/824 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5795.cpp
201 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 08:06:12 ] >>164 #include <stdio.h> #include <stdlib.h> int cmp( const void * l, const void * r ) { return *((int*)l)-*((int*)r); } int main( int argc, char ** args ) { int m, n, i, * data; printf( "input m :" ); scanf( "%d", &m ); printf( "input n :" ); scanf( "%d", &n ); data = ( int * )calloc( m, sizeof( int ) ); if ( ! data ) { puts( "no memory."); exit(1) ; } for ( i = 0; i < m; ++i ) scanf( "%d", &data[ i ] ); qsort( data, m, sizeof( int ), cmp ); for ( i = 0; i < n; ++i ) { int * p, q; printf( "search for >" ); scanf( "%d", &q ); p = bsearch( &q, data, m, sizeof( int ), cmp ); if ( p ) printf( "%d found at %d, %d\n", q, 1 + ( p - data ), data[ ( p - data ) ] ); else printf( "not found.\n" ); } free( data ); return 0; }
202 名前:デフォルトの名無しさん [2008/01/18(金) 10:28:31 ] [1] 授業単元:プログラミング [2] 問題文:問題@ 商品番号・商品名・個数・単価を対象とする構造体の配列を利用し、 データを入力して、一覧表を表示するプログラムを作りなさい。ただし、 各データごとに金額を、最後に合計金額を出しなさい。 問題A 上の問題の構造体の配列を利用し、データを入力した後、商品番号を 並び替えを行い、その結果を一覧表として表示するプログラムを 作りなさい。 [3] 環境 [3.1] OS: (WindowsVISTA) [3.2] コンパイラ名とバージョン: (borland) [3.3] 言語: (C) [4] 期限: ■■緊急■■本日1月18日正午まででお願いします。 [5] その他の制限: 特にありません。
203 名前:デフォルトの名無しさん [2008/01/18(金) 12:42:14 ] [1] 授業単元:プログラミング [2] 問題文:文字列を逆順にコピーする関数xcopyをポインタを用いて作り、確認のためのプログラムを作りなさい。ただし、xcopy(char*to,char*from)とします。なお、対象とするデータは通常の英数字とします。 [3] 環境 [3.1] OS: (Windows VISTA) [3.2] コンパイラ名とバージョン: (borland) [3.3] 言語: (C) [4] 期限: 1月18日 [5] その他の制限: 前102代目に書き込んだんですが見れなくなってしまったのでもう一度お願いします。
204 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 12:50:39 ] >>203 昔のスレからの拾い物 700 名前:デフォルトの名無しさん[sage] 投稿日:2007/12/06(木) 20:47:06 [1] 授業単元:C言語 [2] 問題文 要素数がnoであるint型の配列v2の並びを逆順にしたものを配列v1に格納する関数、 void intary_rcpy(int v1[],const int v2[],int no) {/…/} を作成せよ [3] 環境 [3.1] OS:Windows XP [3.2] VS2005 [3.3] 言語:C++ [4] 期限: 12月7日(金)の午前中まで よろしくお願いします 702 名前:デフォルトの名無しさん[sage] 投稿日:2007/12/06(木) 21:00:46 >>700 #include <algorithm> void intary_rcpy(int v1[],const int v2[],int no){std::reverse_copy(v2, v2+no, v1);}
205 名前: ◆vLIz8KOkPM [2008/01/18(金) 12:54:05 ] [1] プログラミンぐ演習 [2] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5798.txt [3.1] Linux [3.2] gcc [3.3] C言語 [4] 今日15時まで エラーの内容がわかりません…どなたか修正してください…
206 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 12:56:36 ] >>203 void xcopy(char *to, char *from) { char *p = from; while(*p) p++; while(p--!=from) *to++ = *p; *to = '\0'; }
207 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 13:54:06 ] >>205 とりあえず その30行目を穴が開くまで読み返せ new[ length ] = ’\0’; single quotationが全角だ
208 名前:デフォルトの名無しさん [2008/01/18(金) 14:32:38 ] [1] 授業単元: プログラミング基礎 [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5799.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: [2008年01月18日23:59まで](本日中) [5] その他の制限: B_1は自力でいけましたが2に手が出ません;
209 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 16:20:22 ] >>208 B_2 #include <stdio.h> #define N 20 void place_queen(int *x, int n, int k) { int i, j; if(k == n){ for(i = 0; i < n; i++) printf("%d ", x[i]); putchar('\n'); return; } for(i = 0; i < n; i++){ for(j = 0; j < k; j++) if(i == x[j] || k - j == i - x[j] || k - j == x[j] - i) break; if(j == k){ x[k] = i; place_queen(x, n, k + 1); } } } int main(void) { int n, x[N]; printf("Input n : "); scanf("%d", &n); place_queen(x, n, 0); return 0; }
210 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 16:43:55 ] >>208 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5800.txt
211 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 18:13:00 ] >>208 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5801.txt
212 名前:211 mailto:sage [2008/01/18(金) 18:20:51 ] >>208 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5802.txt ごめん、こっちで。
213 名前:208 [2008/01/18(金) 21:00:56 ] みなさんありがとうございます><; 参考にさせていただきました。非常に助かります 申し訳ないのですが、 もしよろしかったらこちらの方もお願いできませんか? kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5803.txt
214 名前:デフォルトの名無しさん [2008/01/18(金) 22:01:12 ] [1] 授業単元: プログラミング中級 [2] 問題文(含コード&リンク):random1.txt、random2.txtという名前の2つのファイルを 作成し、それぞれに0〜100の範囲の乱数(整数)を20個ずつ書き込みなさい。 これら2つのファイルの内容を1行ずつ比較し、大きいほうの数をmax.txtに 書き込みなさい。 [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン: わかりません。 [3.3] 言語: C++ [4] 期限:無期限ですが、なるべく早く知りたいです。
215 名前:214 [2008/01/18(金) 22:02:59 ] 途中まではやってみました・・ #include<stdio.h> #include<stdlib.h> int main(void) { FILE *fout, *fout2, *fout3, *fin, *fin2; int buf,buf2; char filename2[]="random1.txt"; char filename3[]="random2.txt"; char filename4[]="max.txt"; int i; printf("ファイルrandom1.txtを作成しました。\n"); printf("ファイルrandom2.txtを作成しました。\n"); printf("ファイルmax.txtを作成しました。\n");
216 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:03:22 ] >>213 良さそうな教授だなーとちょっと羨ましく思った。そんな俺は非情報学部。
217 名前:214 [2008/01/18(金) 22:03:42 ] 続きです fout=fopen(filename2,"w"); srand(time(NULL)); for(i=0;i<20;i++){ buf=rand()%101; fprintf(fout,"%d\n",buf); } fout2=fopen(filename3,"w"); for(i=0;i<20;i++){ buf2=rand()%101; fprintf(fout2,"%d\n",buf2); } fin = fopen(filename2, "r"); if(fin == NULL){ printf("%dをオープンできません\n", filename2); exit(1); }
218 名前:デフォルトの名無しさん [2008/01/18(金) 22:07:50 ] [1] 授業単元:CプログラミングT [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5805.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:分かりません [3.3] 言語:C++ [4] 期限:2008年1月19日 09:00 [5] その他の制限:特にありません よろしくお願いします!
219 名前:214 [2008/01/18(金) 22:08:01 ] fin2 = fopen(filename3, "r"); if(fin2 == NULL){ printf("%dをオープンできません\n", filename3); exit(1); } fout3=fopen(filename4,"w"); while(1){ if (fscanf(fin,"%d",buf)==EOF) break; if (fscanf(fin2,"%d",buf2)==EOF) break; if(buf>buf2){ fprintf(fout3,"%d\n",buf); } else fprintf(fout3,"%d\n",buf2); } fclose(fout); fclose(fout2); fclose(fin); fclose(fin2); fclose(fout3); return 0; }
220 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:16:02 ] >>214 すこしせこいがこれじゃだめかね #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { FILE *fran1, *fran2, *fmax; char filename1[] = "random1.txt"; char filename2[] = "random2.txt"; char filename3[] = "max.txt"; int i, buf1, buf2; if ((fran1 = fopen(filename1, "w")) == NULL || (fran2 = fopen(filename2, "w")) == NULL || (fmax = fopen(filename3, "w")) ==NULL) { printf("ファイルが作れません\n"); return -1; } printf("ファイルrandom1.txtを作成しました。\n"); printf("ファイルrandom2.txtを作成しました。\n"); printf("ファイルmax.txtを作成しました。\n"); srand(time(NULL)); for (i = 0; i < 20; ++i) { buf1 = rand()%101; buf2 = rand()%101; fprintf(fran1, "%d\n", buf1); fprintf(fran2, "%d\n", buf2); fprintf(fmax, "%d\n", (buf1 >= buf2) ? buf1 : buf2); } fclose(fran1); fclose(fran2); fclose(fmax); return 0; }
221 名前:デフォルトの名無しさん [2008/01/18(金) 22:30:26 ] れいぷれいぷ
222 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:35:46 ] 長くなるんならアップロードしろ
223 名前:デフォルトの名無しさん [2008/01/18(金) 22:36:53 ] すいません 丸投げじゃないんですが、 どこで聞いてもわからないのでわかるかたいたらおねがいします・・ ”数値を文字列として入力して、一桁ずつを配列にいれて和・差・積を出す” って問題で、ここでプログラム作ってもらったんですがわかんないとこがあって、、 ↓これ、積の計算らしいんですけどどういう意味ですか(∵)? int i, j, carry; // 最大100桁になるので2N桁を0に初期化 for( i = 0 ; i < 2 * Max_Length ; i++ ) a[i] = 0; for( i = 0 ; i < Max_Length ; i++ ) { carry = 0; for( j = 0 ; j < Max_Length ; j++ ) { a[i+j] += b[i] * c[j] + carry; carry = a[i+j] / 10; a[i+j] -= carry * 10; 詳しく説明できるかたいたらお願いします、、
224 名前:デフォルトの名無しさん [2008/01/18(金) 22:37:47 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5806.txt [3] 環境 [3.1] OS:Windows xp [3.2] コンパイラ名とバージョン:VisualStudio2005 [3.3] 言語: C 言語 [4] 期限:1月22日 [5] その他の制限:
225 名前:214 [2008/01/18(金) 22:43:53 ] >>220 さん ありがとうございます。 ただ、 fprintf(fmax, "%d\n", (buf1 >= buf2) ? buf1 : buf2); がよくわかりません。。 ?や:の使い方習っていなんです。 bufとbuf2を比較して表示するところがどうしてもできません。
226 名前:220 mailto:sage [2008/01/18(金) 22:47:35 ] if (buf1 >= buf2) { fprintf(fmax, "%d\n", buf1); } else { fprintf(fmax, "%d\n", buf2); } こういうこと。使い方は三項演算子でぐぐれ。
227 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:47:48 ] >>225 if (buf1 >= buf2) fprintf(fmax, "%d\n", buf1); else fprintf(fmax, "%d\n", buf2);
228 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:05:12 ] >>223 情報を小出しにしない方がいい(・3・)YO 筆算と同じ手順と考えたらいい
229 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:43:09 ] [1] C言語入門 [2] 文字列の入れ替え [3] 環境 [3.1] Windows XP [3.2] bcc55 [3.3] C言語 [4] 1週間後 [5] 最初と最後の文字を入れ替える 動作例 文字を入力しる:12345 52341 お願いします。
230 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:04:48 ] 【時間切れ】 (1/18) >142 >202 >213 ? 【未解決問題】 >>218 1/19 9:00 >>86 1/22 >>195 1/22 >>224 1/22 >>229 1/25 pc11.2ch.net/test/read.cgi/tech/1199515728/229 1/31 >>79 無期限 >>144 無期限 問題文>>148
231 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:05:09 ] [1] 授業単元:プログラミング [2] 問題文: グレゴリウス暦の定義を利用して入力された日は何曜日か計算しなさい 西暦1年1月1日は月曜日とする 1年は通常365日ですが閏年は366日 4で割り切れる年は閏年 100で割り切れる年は閏年ではない 400で割り切れる年は閏年 [3] 環境 [3.1] OS:Windows xp [3.2] コンパイラ名とバージョン:VisualStudio2005 [3.3] 言語: C [4] 期限:1月21日 [5] その他の制限: 変数名、関数名の命名規約を作成 goto文は使用しない 開発途中でのreturn プログラム途中でのexitはしない事 よろしくお願いします。
232 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:05:10 ] 142ですが、課題のほうは一応どうにかなったので報告。 取り組んでいただいた方、ありがとうございました。
233 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:09:09 ] >>218 /* 適切なプリプロセッサ */ #define NAMEMAX 10 #define BIRTHMAX 8 #define N 10 /* Record型構造体の定義 */ typedef struct recoord { char personal[NAMEMAX], birth[BIRTHMAX]; double height, weight; }Record; /* outputData関数の定義 */ void outputData(int n, Record *r) { printf("%d人目の出力\n", n); printf("名前は\t\t%s\n", r[n].personal); printf("生年月日は\t%*s\n", BIRTHMAX, r[n].birth); printf("身長は\t\t%4.1lf\n", r[n].height); printf("体重は\t\t%3.1lf\n", r[n].weight); } /* calcBMI関数の定義 */ void calcBMI(int n, Record *r) { printf("%d人目のBMIは\t%4.2lf\n", n+1, r[n].weight/pow(r[n].height/100, 2.0)); }
234 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:13:14 ] >>231 #include<stdio.h> int weekday(int y,int m,int d){ if(m<3)y--,m+=12; return (y+y/4-y/100+y/400+(m*13+8)/5+d)%7; } int main(void){ int y,m,d; printf("年 = ");scanf("%d",&y); printf("月 = ");scanf("%d",&m); printf("日 = ");scanf("%d",&d); printf("日 月 火 水 木 金 土\n%*s↑\n",weekday(y,m,d)*3,""); return 0 ; }
235 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:17:22 ] >>234 問題文見る限りツェラーの公式は使えん希ガス
236 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:23:22 ] >>235 >変数名、関数名の命名規約を作成 って書いてあるくらいだからいいんじゃない?
237 名前:デフォルトの名無しさん [2008/01/19(土) 00:25:28 ] [1] 授業単元:C入門 [2] 問題文 英文の文字列を入力した場合,文字数・単語数・文章数を求めるプログラムを作成せよ。 英文中の特殊文字は(,(カンマ).(ピリオド)!(イクスクラメーション)?(クエスチョンマーク))のみとする。単語の間には1つ以上(2つ以上でも可)のスペースが入れるものとする。 文章の最後には必ず .(ピリオド)!?のどれかが単独で使われる。,(カンマ)や.(ピリオド)!?の後にスペースが入る可能性があるが前にはスペースは入らないものとする。 省略につかう .(カンマ)は今回はないものとする。 入力に関して キーボードから,文字列を一行で入力 出力に関して 文字数・単語数・文章数をそれぞれスペース1つあけて1行で出力(+改行)[3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Study C [3.3] 言語:C [4] 期限:1月22日14:00 [5] その他の制限:一年なのでそこまで難しいのはつかわずにお願いします。
238 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:28:32 ] [1] C言語 [2] 500パターン(test000〜test499)のファイルを用いてそれらのハッシュ値を求めるプログラム。 (ファイルを読み込む際、手動で500パターン打ち込むのは大変なので そこもプログラムで自動的に次々とファイルを読み込むようにしていただけたら嬉しいです) [3] [3.1]Mac OS X [3.2]よくわかりません [3.3]C [4]1/19(土) [5]特になし よろしくお願いします。
239 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:29:35 ] >>236 >西暦1年1月1日は月曜日とする ってのが生きてこなくなるんじゃね? まあどうでもいいかもしれんが
240 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:31:45 ] >>229 #include<stdio.h> int main(void){ char buf[0x100]; int i; printf("文字を入力しる:"); fgets(buf,sizeof(buf),stdin); for(i=0; buf[i]; ++i)if(buf[i]=='\n')break; putchar(buf[i-1]); buf[i-1] = '\0'; printf("%s",buf+1); putchar(buf[0]); return 0; } 表示上では入れ替えてると思う
241 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:38:23 ] >>195 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5807.cpp データはこんな感じで 静止画の圧縮技術と最も関係深いものはどれ? [1] ITU-T H.261,[2] JPEG,[3] MIDI,[4] MPEG 2 10 131-45=53が成り立つのは何進法のときか? [1] 3, [2] 7, [3] 11, [4] 13 2 10
242 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:46:55 ] >>239 それを生かすソース頼む
243 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:47:20 ] >>240 ありがとうございます。 ただ、課題の紙にヒントみたいのがあって char a ='X' ; char b ='Y' ; char c ; c = a a = b b = c って代入していく方法があるよって書かれてました。 今見つけたので前のレスで書けなくてすいませんでした。 でも教えてくれたものも正しく動くので、これでいこうと思います。 もし、お暇でしたら代入するヒントを活用したものも考えてもらえると嬉しいです。
244 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:53:38 ] >>243 #include <stdio.h> int main () { char in[1024], c; int i; scanf("%s", in); for (i = 0; i < sizeof(in) && in[i] != '\0'; ++i); c = in[0]; in[0] = in[i-1]; in[i-1] = c; printf("%s\n", in); return 0; }
245 名前:デフォルトの名無しさん [2008/01/19(土) 00:53:51 ] >>237 こんなんで良いか? #include <stdio.h> #define MAX 1024 int main() { int c,i=0,j; char ary[MAX] = {'\0'}; while((c = getchar())!='\n' && i < MAX){ if(c != '.' && c != ','&& c != '!'&& c != '?') ary[i] = c; i++; } for(j = 0; j < i;j++){ if(ary[j] != ' ') putchar(ary[j]); else if(ary[j] == ' ') putchar('\n'); } return 0; }
246 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:59:26 ] >>242 ソースじゃないけど、俺が考えたのは入力した年月日と1年1月1日 との日数の差を出してから7で割って割り切れたら月曜、1余ったら火曜、、、 ってやるのかなー?と
247 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 01:01:16 ] >>243 putchar(buf[i-1]); buf[i-1] = '\0'; printf("%s",buf+1); putchar(buf[0]); を削除して、char c;を追加 c = buf[i-1]; buf[i-1] = buf[0]; buf[0] = c; printf("%s",buf);
248 名前:231 mailto:sage [2008/01/19(土) 01:11:54 ] >>234 ありがとうございます 結構早くできてて驚きました >>235 そうなんですか?3日前から勉強しだしたんでよくわかりません ツェラーの公式以外だとどんな感じになるんでしょうか?
249 名前:デフォルトの名無しさん [2008/01/19(土) 01:22:04 ] >>245 つくっていただいてありがとうございます。 英文の文字列を入力した場合,文字数・単語数・文章数を表示する部分お願いします
250 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 01:34:38 ] >>248 ゴリ押しでやるとこんな感じ。 #include <stdio.h> int main () { int y, m, d, sum = 0; int m_array[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; char *week[7] = {"日", "月", "火", "水", "木", "金", "土"}; printf("input (e.g. ****/**/**)\n>>"); scanf("%d/%d/%d", &y, &m, &d); if (m > 2 && y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)) { ++sum; } for (m -= 2; m >= 0; --m) { sum += m_array[m]; } --y; sum = sum + y * 365 + y / 4 - y / 100 + y / 400 + d; printf("%s曜日", week[sum%7]); return 0; }
251 名前:231 mailto:sage [2008/01/19(土) 01:58:56 ] >>250 あ、多分それだと思います こんな時間につくってもらってホントありがとうございます
252 名前:デフォルトの名無しさん [2008/01/19(土) 02:04:54 ] >>237 なんか作っててめんどくさくなった #include <stdio.h> #define MAX 1024 int main() { int c,i=0,j,k,word=0,letter=0,wnum=0; char ary[MAX] = {'\0'}; while((c = getchar())!='\n' && i < MAX){ if(c == '.' || c == '!'|| c == '?') letter++; if(c != '.' && c != ','&& c != '!'&& c != '?') ary[i] = c; if(c ==' ' && i>0 ){ k = i -1; if(c ==' ' || ary[k] == '!'|| ary[k] == '?') word++; } i++; } for(j = 0; j < i;j++){ if(ary[j] != ' '){ putchar(ary[j]); wnum++; } else if(ary[j] == ' ') putchar('\n'); } printf("\n文字数=%d 単語数=%d 文章数=%d \n",wnum,++word,letter); return 0; }
253 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 04:17:00 ] >>161 当方で確認した環境は WindowsXP, 処理系は cygwin(gcc 3.4.4) です。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5808.txt fgets(), realloc(), strcat() を使いました。
254 名前:211 mailto:sage [2008/01/19(土) 08:02:26 ] >>213 出勤前のお遊び。 追加するのはいいけど、ちゃんとテンプレで。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5812.txt
255 名前:デフォルトの名無しさん [2008/01/19(土) 08:08:43 ] >>233 解決しました,ありがとうございます!
256 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 09:32:16 ] >>224 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5813.txt データの形式が解らなかったので一行に1つとしてある。 ファイル名はコマンドラインから与える形にした。 あと、stdlib.hをインクルードし忘れてたので追加して。
257 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 11:11:17 ] 【質問テンプレ】 [1] 授業単元: 基礎プログラミング [2] 問題文(含コード&リンク): 入力された値nに対して、f(1)=f(2)=1、f(n)=f(n-1)+f(n-2)となるフィボナッチ数f(n)を表示するプログラミングを再帰を用いて作成せよ。 そのとき、関数fが呼ばれた回数をカウントして表示せよ。n=3,4,…,10のときにそれぞれ関数fが何回呼ばれたか調べよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: できれば1月20日まで [5] その他の制限:特にないと思われるけど。とりあえず再帰関数・構造体のところなので。 よろしくお願いします。
258 名前:デフォルトの名無しさん [2008/01/19(土) 11:34:03 ] >>256 ありがとうございます。 ファイルはこれです。kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5814.txt
259 名前:デフォルトの名無しさん [2008/01/19(土) 11:43:10 ] 画像のピクセル間ごとの輝度を取得して、配列に格納するようなプログラム教えていただけませんか? 例えば100*100の画像なら、x[0][0]に座標0,0の輝度が格納されていくようなものです。
260 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 11:44:34 ] >>259 マルチ。
261 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 11:52:57 ] >>257 #include <stdio.h> int call_count = 0; int f(int n) { call_count++; if(n == 1 || n == 2) return 1; else return f(n - 1) + f(n - 2); } int main() { int n; for(n = 3 ; n <= 10 ; ++n){ call_count = 0; printf("f(%d) = %d\t(call count: %d)\n", n, f(n), call_count); } return 0; }
262 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 12:22:02 ] 【質問テンプレ】 [1] 授業単元: 置き換え方ステガノグラフィ [2] 問題文(含コード&リンク): 100*100のbmp画像を4つの50*50のブロックにわけ 各ブロックの輝度を計算し、左上からABCDとする。 (a)A>Bのとき0 B>Aのとき1とし (b)C>Dのときは0 D>Cのときは1とする 仮に(a)=1,(b)=0という出力が得たとし ここで入力値(a')=0,(b')=1とするとき ブロック毎の輝度を調節し、画像を出力しなさい。 また再度計算させ出力が(a)=0,(b)=1として得られること ここでの輝度計算は、(r*0.299)+(b*0.587)+(g*0.114)を使いなさい [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual C++ 2005 [3.3] 言語: C++ [4] 期限:1月21日 [5] その他の制限:無制限