1 名前:デフォルトの名無しさん [2007/09/21(金) 08:46:37 BE:340816166-2BP(12)] あなたが解けない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++の宿題を片付けます 95代目 pc11.2ch.net/test/read.cgi/tech/1187944110/
448 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 11:20:28 ] 任意の長さの文字列(英字のみ)データをファイルから読み込み、辞書順に並べ替えて 最終結果のみを表示するプログラムを作成する宿題なんですが、ファイルを読み込もうと するところでなぜか止まってしまいます。原因がよくわからないので助けてください…。 Cテキスト kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4986.txt 読み込みファイル用テキスト(これじゃなくてもOK) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4987.txt 細かい指定は、 ・英字の大文字小文字に関しては凝らなくていい ・データ最大数は1000 ・文字列の最大長は64 ・データは改行で区切られている
449 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 11:28:03 ] >>448 そういうときは、色々な変数の値をprintfで吐き出すと良いよ > scanf("%s,in_filename");
450 名前:448 mailto:sage [2007/09/28(金) 12:01:37 ] なんというくだらないミス\(^O^)/ 申し訳ありませんでした……
451 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 12:50:24 ] ファイル読めない時のエラーメッセージもだしとけよ
452 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 15:00:32 ] [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): /****memo.txt********/ atsusa a ts u s a au a u awatadashii a w a t a d a sh i i awa a w a /*********************/ このmemo.txt というファイルがあるとして、 このファイルを読み込み、右の「a,ts,u,s,a」という単位で かかれてある右の列(2列目)を(atsusaを1列目、a,ts,u,s,aを2列目) a ts u s a と表示できるようにしなさい。 [3] 環境 [3.1] OS:LINUX [3.3] 言語:C [4] 期限:早いほうがいいです [5] その他の制限:なし
453 名前: ◆EtzJSByuaQ mailto:sage [2007/09/28(金) 16:43:58 ] 【質問テンプレ】 [1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク):圧力P一定の下、温度変化量ΔTしたとき、1molの理想気体のガス容積の変化量ΔVを算出する関数を作成しなさい [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:CPad for Borland C++Compiler ver2.31 [3.3] 言語:C++ [4] 期限:2007年09月28日20時くらいまで 本当にわからなくて困っています。よろしくお願い致します。
454 名前: ◆vLIz8KOkPM [2007/09/28(金) 17:29:14 ] [1] 授業単元: プログラミング演習 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 9月29日(土)午後9時まで [5] その他の制限: ポインタ、構造体、配列、関数まで習ったので、この範囲内でお願いします。 [2] 問題文(含コード&リンク): **発展課題**について【下に、発展課題の問題文、自分の作成したプログラムをのせます】、 各口座のデータをバイナリファイルに保存する機能(口座データが変更される度にfwriteで) 各口座のデータをバイナリファイルから読み込む機能(プログラム起動時に1 回のみfreadで)を追加せよ.実行例を下に示す。 % ./kadai13 口座データ読込み(1:ファイルから2:初期値を使用)? 1 口座番号を入力してください: 9012 暗証番号を入力してください: 0123 引出し額を入力してください: 20000 ありがとうございました.残高は518600 円です 口座データ保存(1:ファイルへ2:保存しない)? 1 口座番号を入力してください: ← 口座番号入力に戻る 発展課題の問題については>>455 それに対する自分のプログラムは>>456
455 名前: ◆vLIz8KOkPM [2007/09/28(金) 17:29:46 ] ****************発展課題の問題文**************** ATM(Automated Teller Machine; 現金自動預け払い機) システムを実現するプログラムを作成する. 最初に,氏名,口座番号,暗証番号,預金残高を要素とする構造体を定義し,512 人分の口座が作成可能なようにせよ. また,初期値として次のように構造体の内容を設定せよ. • 田中太郎の口座番号は1234 で,預金残高を1,234,560 円に設定する. • 山田花子の口座番号は5678 で,預金残高を 987,600 円に設定する. • 鈴木一郎の口座番号は9012 で,預金残高を 538,600 円に設定する. • 暗証番号は口座番号に1111 を足して10000 で割った余りに設定する. このとき引出しの機能を実現せよ。具体的には,口座番号の入力,暗証番号の入力と確認,支払額の入力,預金残高の更新をするプログラムを作成せよ. 実行例を以下に示す % ./kadai10 口座番号を入力してください: 5000 ← 存在しない 暗証番号を入力してください: 0123 口座番号または暗証番号が間違っています. 口座番号を入力してください: 9012 暗証番号を入力してください: 5555 ← 間違っている 口座番号または暗証番号が間違っています. 口座番号を入力してください: 9012 暗証番号を入力してください: 0123 引出し額を入力してください: 1000000 ← 預金額より多い 預金額が不足しています. 口座番号を入力してください: 9012 暗証番号を入力してください: 0123 引出し額を入力してください: 20000 ありがとうございました.残高は518600 円です. 口座番号を入力してください: ← 始めに戻る
456 名前: ◆vLIz8KOkPM [2007/09/28(金) 17:35:06 ] **********発展課題について自分が作成したプログラム*************** #include<stdio.h> #include<string.h> #define MAC 256 main(){ char save[MAC]; int account; int code; int draw; int i; struct{ char name[MAC]; int account; int code; int balance; }ATM[500]; strcpy(ATM[0].name,"田中太郎"); ATM[0].account=1234; ATM[0].code=(ATM[0].account+1111)%10000; ATM[0].balance=1234560; strcpy(ATM[1].name,"山田花子"); ATM[1].account=5678; ATM[1].code=(ATM[1].account+1111)%10000; ATM[1].balance=987600; strcpy(ATM[2].name,"鈴木一郎"); ATM[2].account=9012; ATM[2].code=(ATM[2].account+1111)%10000; ATM[2].balance=538600; printf("あなたの口座番号を入力して下さい:"); fgets(save,MAC,stdin); sscanf(save,"%d",&account); for(i=0;i<=500;i++){ if(account==ATM[i].account) break; } if(account!=ATM[i].account){ printf("そのような口座は存在しません.\n"); } else{ printf("暗証番号を入力して下さい:"); fgets(save,MAC,stdin); sscanf(save,"%d",&code); for(i=0;i<=500;i++){ if(code==ATM[i].code) break; } if(code==ATM[i].code){ printf("%s 様ですね.\n",ATM[i].name); printf("引出し金額を入力して下さい:"); fgets(save,MAC,stdin); sscanf(save,"%d",&draw); if(draw<0){ printf("ERROR!!\n"); } else if(draw>ATM[i].balance){ printf("金額が不足しています.\n"); } else if(draw<=ATM[i].balance){ printf("預金残高は %d 円です.\n",ATM[i].balance-draw); }} else if(code!=ATM[i].code){ printf("認証に失敗しました.\n"); }} return(0); }
457 名前: ◆vLIz8KOkPM [2007/09/28(金) 17:40:24 ] 長文で申し訳ないですが、是非ともよろしくお願いします。m(_ _)m
458 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 18:00:37 ] [1] 授業単元:C言語 [2] 問題文(含コード&リンク):文字列AB、CD、EF、GHがある。キーボードから文字を入力しこの文字列があればそれを取り出す。 全部取り出したら終了する。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: BCC5.5 [3.3] 言語:C [4] 期限: 2007/10/1 [5] その他の制限:実行例 現在:AB、CD、EF、GH 文字を入力してください:AB ABはありました。 現在:CD、EF、GH 文字を入力してください:TR TRはありません。 現在:CD、EF、GH 文字を入力してください: ・ ・ ・ 現在:GH 文字を入力してください:GH GHはありました。 これで終了します。
459 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 18:46:37 ] #include <stdio.h> #include <string.h> int main(void){ char *a[]={"AB","CD","EF","GH"},b[9],c[]="現在:%s",d[]="、%s",*e;int i; while(1){ e=c; for(i=0;i<sizeof(a)/sizeof(a[0]);++i){ if(a[i]){ printf(e,a[i]); e=d; } } if(e==c) break; printf("\n文字を入力してください:"); scanf(" %8[^\n]",b); for(i=0;i<sizeof(a)/sizeof(a[0]);++i){ if(a[i] && !strcmp(a[i],b)){ printf("%sはありました。\n",b); a[i]=0; goto found; } } printf("%sはありません。\n",b); found:; } puts("これで終了します。 "); return 0; }
460 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 19:02:44 ] gotoかよw
461 名前:デフォルトの名無しさん [2007/09/28(金) 21:50:48 ] [1]授業単元:プログラミング演習 [2]問題文:ポインタをつかって@変数aのアドレスを獲得する。A変数bのアドレスを変数aのアドレスの4バイト後方におきたい。B変数aのアドレスの4バイト後方に(a+90)の値を代入する。CA、Bの結果をprintf文で出力。 [3]環境 [3.1]Windows、Visual stdio Japan2005 (注)エラーが出ると思いますが、結果は出ます。 お願いします。
462 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 21:58:40 ] 変数の型は?
463 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 22:12:58 ] 一気に宿題されすぎでおれの宿題が答えられてないな。。。 おれも片付けに参加しようかね。
464 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 22:16:59 ] どれ?
465 名前:デフォルトの名無しさん [2007/09/28(金) 22:48:52 ] >>459 >>460 blogs.wankuma.com/jitta/archive/2007/09/27/98335.aspx blogs.wankuma.com/jitta/archive/2007/09/28/98562.aspx
466 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 23:10:13 ] >>452 どの程度自由度があるかわかんね. "memo.txt"というファイル名に対して,a ts u saを表示するだけでいいの? それとも,そのコメント風の部分も評価しなきゃいけないの?
467 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 23:28:39 ] goto文使うとプログラム読みにくくなるしループとか抜け出すならbreakとかあるからな。 俺も極力使うなって言われたけど中にはそっちの方が分かりやすいって人もいるんじゃない?
468 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 23:35:31 ] >467 この例だと分かりにくいぞw 判定ループは関数化して、戻り値で ありました/ありません 表示だろ、普通。
469 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 23:58:10 ] 条件判定部にsizeof(a)/sizeof(a[0])なんて書いてるのみると、 深い考えがあってgoto使ってるようには見えないけどな
470 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 00:05:25 ] goto無しで作ってみるか?
471 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 00:18:17 ] >>470 横槍で良く分かってないけど、コレで良いか? for(i=0;i<sizeof(a)/sizeof(a[0]);++i){ if(a[i] && !strcmp(a[i],b)){ printf("%sはありました。\n",b); a[i]=0; break; } } if(i==sizeof(a)/sizeof(a[0])) printf("%sはありません。\n",b);
472 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 00:22:35 ] それだと、最後のifがムダだって言いたいんだろ
473 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 00:37:36 ] じゃあこうか? char *format; ・・・ format = "%sはありません。\n"; for(i=0;i<sizeof(a)/sizeof(a[0]);++i){ if(a[i] && !strcmp(a[i],b)){ a[i]=0; format = "%sはありました。\n"; break; } } printf(format,b);
474 名前:452 mailto:sage [2007/09/29(土) 00:39:29 ] /****memo.txt********/ atsusa a ts u s a au a u awatadashii a w a t a d a shi i awa a w a /*********************/ ちょっといろいろ考えてたんだけど。 このファイルを読み込み、右の「a,ts,u,s,a」という単位で かかれてある右の列(2列目)を(atsusaを1列目、a,ts,u,s,aを2列目) a ts u s a という風な形で、ファイル"output1.txt"と出力するようにしなさい。 ってのがいいかな。 ”atsusa a ts u s a”のスペースがくるたびに改行して配列にいれて、その1つ目を無視して2つ目から 配列にいれて出力すればいんだけどどう書けばいいのかわからなくて。
475 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 00:48:16 ] フラグ使って一つ目のスペースがくるまで飛ばせば?
476 名前:デフォルトの名無しさん [2007/09/29(土) 01:01:46 ] >>461 型はintの整数です。
477 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 01:05:30 ] 変数bのアドレスは宣言時に決まるから、aのアドレスを得てからその4バイト後ろをbのアドレスにするってのは無理
478 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 01:17:52 ] >>474 ファイルのフォーマットが今ひとつ分かんないので、チョー手抜き。 1行は254文字以下、行末にスペースが無い、単語間のスペースが1つという条件。 #include <stdio.h> #include <string.h> int main() { FILE *ifp, *ofp; char line[256]; char *pos; if((ifp = fopen("memo.txt", "r")) == NULL) { return 1; } if((ofp = fopen("output1.txt", "w")) == NULL){ fclose(ifp); return 1; } while(fgets(line, 256, ifp) != NULL){ if((pos = strchr(line, ' ')) != NULL){ for(pos++;*pos != '\0';pos++){ if(*pos == ' '){ fprintf(ofp, "\n"); } else{ fprintf(ofp, "%c", *pos); } } } } fclose(ifp); fclose(ofp); return 0; }
479 名前:デフォルトの名無しさん [2007/09/29(土) 03:43:34 ] [1] 授業単元:C言語基礎 [2] 問題文(含コード&リンク): ファイルにN×Nの整数行列が2つ書き込まれている。この2つの行列積を求め、 解を違うファイルに書き込みなさい。 ただし、2つのN×N整数行列のデータは 3 1 2 3 5 6 7 1 2 3 3 2 1 3 4 5 6 7 8 のように書き込まれているとする。 (先頭の値で次元Nを指定している。) [3] 環境 [3.1] OS: (Linux) [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語: (C言語) [4] 期限: 07年9月30日まで [5] その他の制限:入力ファイル、出力ファイルはともに任意のファイル名を 指定できるようにする。 「257」の方のプログラムが見た感じ似ていたので、挑戦してみたのですが やはり無理でした…
480 名前:459 mailto:sage [2007/09/29(土) 04:58:00 ] 何か夜中にいろいろやりとりあったみたいやね。 とりあえず>>458 はgotoまずかったらテキトーに直しといて。 1番いいのは>>468 だけど、>>471 か>>473 に置き換えてもいいんじゃないかな。 講師がソースろくすっぽ見ないってんなら関係ないけど。
481 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 05:17:34 ] >>476 型が int なら int a, b; int b, a; のいずれか(環境依存)で a の4バイト後ろに b が配置されるけど題意の様に 『a のアドレスを得てから』は無理だな 出題者は &b = (&a)++; が可能だとでも思ってるのかな
482 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 05:39:05 ] >>474 strtok() 使えば簡単じゃね?禁止されてるなら char buf[100]; // に "atsusa a ts u s a\n" が入ってると考えてね char *top, *ptr; top = strchr( buf, ' ' ); if( top ) { top++; while( 1 ) { ptr = strchr( top, ' ' ); if( ptr ) *ptr = '\n'; else break; } printf( "%s", top ); } で出力できると思うけど、区切りの ' ' が複数連続すると余計な改行が発生するから30点くらい?
483 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 07:11:26 ] >>479 >>316 に追加で int main(void){ FILE *fp_in, *fp_out; int N=0, column, row; matrix_t *a, *b, *c; fp_in=fopen("ファイル", "r"); if(fp_in==NULL) return 1; fp_out=fopen("違うファイル", "w"); if(fp_out==NULL){ fclose(fp_in); return 1; } fscanf(fp_in, "%d", &N); a=matrix_alloc(N, N); b=matrix_alloc(N, N); for(column=0;column<N;column++) for(row=0;row<N;row++) fscanf(fp_in, "%lf", &a->data[column][row]); for(column=0;column<N;column++) for(row=0;row<N;row++) fscanf(fp_in, "%lf", &b->data[column][row]); c=matrix_mul(a, b); for(column=0;column<N;column++){ for(row=0;row<N;row++) fprintf(fp_out, " %.0f", c->data[column][row]); fprintf(fp_out, "\n"); } fclose(fp_in); fclose(fp_out); return 0; }
484 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 07:39:15 ] >>474 #include<stdio.h> int main(void) { char buf[1000]; FILE *fp=stdin; int is_top=1; while(1) { if(fscanf(fp, "%[^ \t\n]", buf)==1){ if(!is_top) printf("%s\n", buf); is_top=0; } else if(fscanf(fp, "%[ \t]", buf)==1) { } else if(fscanf(fp, "%1[\n]", buf)==1) { is_top=1; } else { break; } } return 0; }
485 名前:デフォルトの名無しさん [2007/09/29(土) 11:44:39 ] >>454->456をお願いしますm(__)m
486 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 11:47:41 ] >>453 double dv(double p,double dt){return 8.314/p*dt;}
487 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 12:05:27 ] >>485 456の動きが455の表示の例と違うんだけど、それは無視して良いんかな?
488 名前:479 [2007/09/29(土) 12:19:43 ] >>483 matrix_t *a, *b, *c; 部分でエラーが出てしまいます。 あと、ファイル指定は>>257 の方のような、キーボードから行える形にしてもらいたいのですが・・・ よろしくお願いします。
489 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 12:31:35 ] >>488 >>483 をよく読んでから >>257 の必要な部分をコピペでおk あと、変数名はどちらか合わせないといけない
490 名前:479 [2007/09/29(土) 14:50:00 ] >>489 すみません。そのプログラムを作成してもらえないでしょうか? 力不足でプログラムを応用して完成することが無理なんです・・・
491 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 14:51:56 ] それをやらなければ身につかんだろうが
492 名前:デフォルトの名無しさん [2007/09/29(土) 14:52:51 ] [1] 授業単元: [2] 問題文(含コード&リンク): 下記 [3] 環境 [3.1] OS: (Windows) [3.2] [3.3] 言語: (C) [4]9/29 かなりの初心者でさっぱりです。ヨロシク願いします。 以下のプログラムは、入力された10個の数値を引き算し、その結果を表示するプログラムです。 9〜11行目を別の関数(関数名はFuncDev)とし、修正しなさい。 ただし、グローバル変数は使わないこと。また、FuncDev内のローカル変数名は任意とする。 FuncDev関数は以下の定義とする。 int FuncDEv(void) FuncDev関数の戻り値は、画面入力されたint型データとする。 #include<stdio.h> void main(void); void main(void) { int n1,n2; int nt; nt=0; for(n1=0;n1<10;n1++){ printf("0-9の数値を入力:"); scanf("%d,&n2"); nt-=n2; } printf("結果%dです"nt); }
493 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 15:03:33 ] #include<stdio.h> int FuncDev(void) { int n2; printf("0-9の数値を入力:"); scanf("%d", &n2); return n2; } void main(void) { int n1,n2; int nt; nt=0; for(n1=0;n1<10;n1++){ n2= FuncDev(); nt-=n2; } printf("結果%dです", nt); }
494 名前: ◆vLIz8KOkPM [2007/09/29(土) 16:11:51 ] >487 456のプログラムで大丈夫です。よろしくお願いしますm(__)m
495 名前:474 mailto:sage [2007/09/29(土) 17:37:56 ] >478、484 ありがとうございました。 ちょっと作り替えて表示できました。 表示できたこの a ts u s a a u a w ... とできたのですが、これを a a a ts u w u a s t a a d a と言う風にchar型の二次元配列に格納したいんですけど。 このあとに列単位で違う関数に送りたいんですけど可能ですかね。
496 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 17:40:46 ] >>494 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4991.txt
497 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 17:45:48 ] >>461 >エラーが出ると思いますが、結果は出ます。 こういうこと? #include <stdio.h> int main(){ int a , *b; printf("a?>"); scanf("%d" , &a); b = &a + 1; printf("Address:a=>%d , b=>%d\n" , &a , b); *b = a + 90; printf("Value:a=>%d , b=>%d" , a , *b); return 0; } まあ、bのアドレスがaの4バイト先にあるわけじゃないけど、出題者はこういうことを言いたいんじゃね? エラー出ないけどw
498 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 19:23:14 ] >>495 #include <stdio.h> #include <string.h> int main(int argc, char *argv[]){ FILE *fp; int row = 0, col = 0, max_col = 0, i, j; char buf[128], *p, str[128][128][3] = {0}; if(argc < 2 || (fp = fopen(argv[1], "r")) == NULL) return 0; while(fgets(buf, sizeof(buf), fp) != NULL){ p = strtok(buf, " \n"); while((p = strtok(NULL, " \n")) != NULL) strcpy(str[row][col++], p); row++, col = 0; } fclose(fp); for(i = 0; i < row; i++){ for(j = 0; str[i][j][0] != '\0'; j++) ; if(j > max_col) max_col = j; } for(j = 0; j < max_col; j++){ for(i = 0; i < row; i++) if(str[i][j][0] != '\0') printf("%2s ", str[i][j]); else printf("%*c", 3, 32); printf("\n"); } return 0; }
499 名前: ◆vLIz8KOkPM [2007/09/30(日) 01:55:24 ] >>496 お返事遅れてすみません… お陰様で助かりました。大変ありがとうございましたm(__)m
500 名前:452 mailto:sage [2007/09/30(日) 02:29:03 ] >>495 作ってくれたのはありがたいんですけど、少々考え直しまして。 めんどくさいけど大量にファイルを出力してから、それを入力したほうが 作ってあるプログラムにあわせやすいので。 そこでちょっとまた疑問がでまして。 a ts u s a a w a a u というファイル(例えばalpa_file.txt)があるとして、この何もかかれていない 行にきたら、それまでの文字をファイル出力して、また次の行にいき、すすんでいって、何もかかれてない行にきたら また違うファイルに出力みたいにしたいんですけど。
501 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 02:46:25 ] ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4992.txt 長くなったのでロダの方へ上げました どうか皆様の知恵をお願いします
502 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 07:16:59 ] >>501 >>1 嫁。 【質問者へ】 回答者の便宜のため、質問の際は以下を行うことを推奨します。 <略> ・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。 ということでお前はもう質問禁止な方向に。
503 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 07:34:39 ] >>502 >>1 嫁。 > 気に入らない質問やその他や発言はスルーの方向で。 ということでお前はもう回答禁止な方向に。
504 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 08:46:53 ] 無限ループの予感。
505 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 14:39:56 ] >>503 >>1 嫁。 > 気に入らない質問やその他や発言はスルーの方向で。 ということでお前はもう回答禁止な方向に。 >>504 こうですかわかりません><
506 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 15:41:30 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):口頭で説明されたので問題文はありません。 入力した2文字のアルファベット4組(たとえば ae、bd、ac、ab)を アルファベット順(上の例だったら ab、ac、ae、bd)に表示せよ また数字でも同じことをせよ(3、4、2、1→1、2、3、4) あとリスト構造を使えとか言ってました [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:学校のはよくわからんです [3.3] 言語:C [4] 期限: 2007年10月3日まで [5] その他の制限:とくにないです よろしくおねがいします
507 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 15:50:16 ] >>506 「リスト構造を使え」というのは、その問題に関しては何か不自然。 もういちど問題を確認することをお勧めする。
508 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 16:01:02 ] リストのソートだろ?普通じゃね?
509 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 16:11:52 ] >>508 要素数がたった4つに固定されていたら、 リストを使う意味は全く無いと思うけど。 俺は、要素数4つというのは単に説明の例で、 本当はもっと多いか不明のどちらかだと予想してる。
510 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 17:03:59 ] >>509 すみません、聞いてみたら4つで固定とは言ってなかったとです。
511 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 17:55:31 ] C言語で、二重ループを用いた20行以上のプログラムと二重ループと配列を使った20以上のプログラムをレポートで出されたのですが、何か知っていたら教えてください。 始まりの部分は、 #include<stdio.h> int main(void) { でお願いします 携帯からですいません
512 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 18:04:41 ] >>511 知るか(笑)
513 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 18:45:52 ] どんだけ漠然としてるんだwwww
514 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 18:45:59 ] >>506 , >>510 入力はキーボードから。EOF (CTRL-D など)で入力終了。 エラーチェックは特にしていない。挿入ソート。 二文字文字列バージョン: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4994.c 整数値バージョン: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4995.c
515 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 18:54:29 ] >>501 P^-1 は手で計算してよろしい?それとも プログラム上で計算しないとダメ? あと #include <stdio.h> だけど C++ でいいの?
516 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 19:43:45 ] >>514 面白いな
517 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 20:32:33 ] >>501 #include<stdio.h> int main(void){ int i, j, n, num[9+1]; while(1) { printf("行数(1-9):"); scanf("%d", &n); if(1<=n && n<=9) break; printf("\nエラー\n"); } num[0]=num[1]=1; for(i=0;i<n;i++) { num[i+1]=0; for(j=i;j>=0;j--) num[j+1]+=num[j]; for(j=0;j<=i+1;j++) printf(" %d", num[j]); printf("\n"); } return 0; }
518 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 20:38:28 ] 言語間違えた orz #include<iostream> int main(void){ int i, j, n, num[10]; while(1){ std::cout << "行数(1-9):"; std::cin >> n; if(1<=n && n<=9) break; std::cout << std::endl << "エラー" << std::endl; } num[0]=num[1]=1; for(i=0;i<n;i++){ num[i+1]=0; for(j=i;j>=0;j--) num[j+1]+=num[j]; for(j=0;j<=i+1;j++) std::cout << num[j] << " "; std::cout << std::endl; } return 0; }
519 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 21:42:56 ] >>500 日本語でおk 少し長い文章を書くと内容がめちゃくちゃになるようなので 何をしたいのか最初から箇条書きで書き直し
520 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 21:48:50 ] >>515 自分で計算してOKです そして言語ですが、確認したらCでもC++でも可能との事 問題文のソース例はCの場合でした
521 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 21:49:34 ] >>511 >>517
522 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 21:57:28 ] サンクス!
523 名前:500 mailto:sage [2007/09/30(日) 22:01:09 ] 以下のファイル(file1.txt)があるとします。 このファイルをfgetsで読み込んで、文字が書かれてない行にきたら それまで読み込んだ文字を違うファイル(output_file1.txt)に出力します。 出力したらまた元のファイルの読み込みを始めます。そして文字が書かれてない行に きたら、また違う別のファイル(output_file2.txt)に出力します。 読み込むファイルfile1.txtが a ts u s a a w a a u とすると 出力するファイルoutput_file1.txtに a ts u s a また次の出力するファイルoutput_file2.txtに w a と出力できるようにしたいということです。すみません説明できなくて
524 名前:500 mailto:sage [2007/09/30(日) 22:02:17 ] >また次の出力するファイルoutput_file2.txtに >w >a でなくて a w a です
525 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 22:25:40 ] fout=0として書き込む前にチェックするのが普通だろうが、まあいいや。 #include <stdio.h> int main(void){ char buff[256];int i=1; FILE *fin=fopen("file1.txt","r"),*fout=fopen("output_file1.txt","w"); while(fgets(buff,sizeof(buff)/sizeof(buff[0]),fin)){ if(buff[0]=='\n'){ fclose(fout); sprintf(buff,"output_file%d.txt",++i); fout=fopen(buff,"w"); }else{ fputs(buff,fout); } } fclose(fout);fclose(fin); return 0; }
526 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 22:29:03 ] >>523-524 重要なのは どんな入力に対して どんな出力が必要か を明記する事であって、ころころ変わるあなたの考える処理方法ではない 仮に、読み上げソフトか何かに与えて、同時発音させるのが目的ならば あなたの考えはあと何回も変わるだろうし… もう少し、何の為に何をどうしたいのかを整理して出直してきて下さい [user]$ awk -f a.awk < memo.txt #!/bin/awk -f BEGIN{count=1} !/^$/ && NF>1{ filename=sprintf("output_file%d.txt", count); for(i=2;i<=NF;i++) print $i>> filename count=count+1; }
527 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 23:02:45 ] 未回答&&期限内の問題ってある?
528 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 23:06:49 ] >>527 Hello Worldを表示せよ
529 名前:500 mailto:sage [2007/09/30(日) 23:14:39 ] 525 ありがとさん
530 名前:デフォルトの名無しさん [2007/09/30(日) 23:16:12 ] [1] 授業単元: C言語基礎 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4998.txt [3] 環境 [3.1] OS: Windows [3.3] 言語: C言語 [4] 期限:10月1日午前1時まで [5] その他の制限:C言語を習い始めてまだ3ヶ月程度です よろしくおねがいします
531 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 23:23:48 ] >>530 課題1 #include <stdio.h> int main( void ) { int year; int check; scanf( "%d", &year ); if ( year % 400 == 0 ) { check = 1; } else if ( year % 100 == 0 ) { check = 0; } else if ( year % 4 == 0 ) { check = 1; } else { check = 0; } if ( check == 0 ) { printf( "閏年ではありません" ); } else { printf( "閏年です" ); } return 0; }
532 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 23:33:35 ] >>530 課題2(むりやりswitch使った悪い例) #include <stdio.h> int main( void ){ const char * const tv_name[] = { "HBC", "NHK総合", "STV", "NHK教育", "TVH", "UHB", "HTB", }; int channel; scanf( "%d", &channel ); switch ( channel ) { case 1: channel = 0; break; case 3: channel = 1; break; case 5: channel = 2; break; case 12: channel = 3; break; case 17: channel = 4; break; case 27: channel = 5; break; case 35: channel = 6; break; default: channel = -1; break; } if ( channel != -1 ) { printf ( "%s", tv_name[ channel ] ); } return 0; }
533 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 23:35:40 ] 遅れたorz #include <stdio.h> int main(void){ int input; char *channel=NULL; scanf("%d",&input); switch (input){ case 1:channel="HBC";break; case 5:channel="STV";break; case 12:channel="NHK教育";break; case 17:channel="TVH";break; case 27:channel="UHB";break; case 35:channel="HTB";break; default:channel="砂嵐";break; } printf("%s\n",channel); return 0; }
534 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 23:39:37 ] #include <stdio.h> int main(void) { int a; printf("西暦を入力してください。"); scanf("%d",&a); if((a % 4 == 0 && a % 100 != 0) || a % 400 == 0) printf("%d年は閏年です。\n ",a); else printf("%d年は閏年じゃありません。\n",a); return(0); }
535 名前: ◆AsDEGV.0To [2007/10/01(月) 00:02:45 ] [1] 授業単元:コンピュータとプログラミング [2] 問題文(含コード&リンク): 年月日(YYYY MM DD)と10個の整数値をキーボードから入力し、それにの値を バイナリファイルに保存するプログラムを作成すること。それぞれの値の形は、 年(short),月(short),日(short),入力した整数値(int)とすること。 [3] 環境 [3.1] OS: Windows [3.3] 言語: C言語 [4] 期限:2007年10月01日01:10まで [5] その他の制限:ポインタ・ファイル入出力迄はやっています。 宜しくお願いします。
536 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 00:14:46 ] バイナリで保存しなきゃだめなの?
537 名前:530 [2007/10/01(月) 00:19:17 ] >>531 >>532 >>533 >>534 ありがとうございます
538 名前: ◆4Jr51i3qWE [2007/10/01(月) 00:21:27 ] >>536 バイナリと指定されています
539 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 00:26:59 ] >>535 #include<stdio.h> int main(void) { short year, month, day; int i, value[10], value_num=sizeof(value)/sizeof(value[0]); FILE *fp; printf("年:"); scanf("%hd", &year); printf("月:"); scanf("%hd", &month); printf("日:"); scanf("%hd", &day); for(i=0;i<value_num;i++) { printf("%2d番目の数値入力:", i+1); scanf("%d", &value[i]); } fp=fopen("binary.dat", "wb"); if(fp==NULL) return 1; fwrite(&year, sizeof(year), 1, fp); fwrite(&month, sizeof(month), 1, fp); fwrite(&day, sizeof(day), 1, fp); fwrite(value, sizeof(value[0]), value_num, fp); fclose(fp); return 0; }
540 名前:デフォルトの名無しさん [2007/10/01(月) 00:29:37 ] チョン、さっさと死ねや
541 名前: ◆4Jr51i3qWE [2007/10/01(月) 00:30:38 ] >>539 有難うございました。
542 名前:デフォルトの名無しさん [2007/10/01(月) 00:32:55 ] チョン、さっさと死ねや
543 名前:デフォルトの名無しさん [2007/10/01(月) 00:33:43 ] チョン、さっさと死ねや
544 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 00:34:18 ] キョンかと思った俺はハルヒ厨
545 名前: ◆4Jr51i3qWE [2007/10/01(月) 00:56:01 ] 2番目の問題もお願いします。 [1] 授業単元:コンピュータとプログラミング [2] 問題文(含コード&リンク): 年月日(YYYY MM DD)と10個の整数値をキーボードから入力し、それにの値を バイナリファイルに保存するプログラムを作成すること。それぞれの値の形は、 年(short),月(short),日(short),入力した整数値(int)とすること。 上記の問題で作成したファイルを読み込んで、内容をディスプレイに順番に表示するプログラムを作成する事。 [3] 環境 [3.1] OS: Windows [3.3] 言語: C言語 [4] 期限:2007年10月01日01:55まで [5] その他の制限:ポインタ・ファイル入出力迄はやっています。 連続になりますが、お手数掛けます。
546 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 01:01:45 ] >>545 #include<stdio.h> int main(void) { short year, month, day; int i, value[10], value_num=sizeof(value)/sizeof(value[0]); FILE *fp; fp=fopen("binary.dat", "rb"); if(fp==NULL) return 1; fread(&year, sizeof(year), 1, fp); fread(&month, sizeof(month), 1, fp); fread(&day, sizeof(day), 1, fp); fread(value, sizeof(value[0]), value_num, fp); fclose(fp); printf("%d %d %d\n", year, month, day); for(i=0;i<value_num;i++) { printf("%2d番目の数値:%d\n", i+1, value[i]); } return 0; }
547 名前: ◆4Jr51i3qWE [2007/10/01(月) 01:04:48 ] ありがとうございます。
548 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 02:05:28 ] [1] 授業単元: [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4999.txt [3] 環境 [3.1] OS: windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 10月1日23:00まで [5] その他の制限: よろしくお願いします