- 1 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 15:30:38 ]
- あなたが解けない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++の宿題を片付けます 121代目 pc11.2ch.net/test/read.cgi/tech/1230678123/
- 116 名前:デフォルトの名無しさん [2009/01/17(土) 00:31:00 ]
- [1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク): www.k-php.com/lib/uploda/src/file132.jpg この問題をR=0、R=0.2のそれぞれの場合について求めろという課題です [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition [3.3] 言語:C言語 [4] 期限: 1月19日まで [5] その他の制限: 特にないです どなたかよろしくお願いします
- 117 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 01:24:17 ]
- 専門的な知識が必要な課題が増えてきたなあ。
そういう時期なんだろうなあ。 俺には無理。
- 118 名前:デフォルトの名無しさん [2009/01/17(土) 01:40:43 ]
- [1] プログラミング
[2] 問題文(含コード&リンク): 画面に任意の次数の単位行列を表示するプログラムを作れ。 [3] 環境 [3.1] OS:Windows XP [3.2] g++ [3.3] C++ [4] 期限:1月19日まで [5] 特に制限はないです。 お願いします;;
- 119 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 01:49:52 ]
- >>115
成績1、成績2ってなんだ? 点数とはどう関係する? >>116 まずは、 v(t) = ... i(t) = ... まで手計算で解け
- 120 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 01:52:33 ]
- >>116
この辺を100ボルトにしてやれば、ナントカなるのだろうか? www.ele.kanagawa-it.ac.jp/~tachibana/H16_NumAnal_PDF/H16_NumAnl_chap2_list.pdf
- 121 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 01:55:06 ]
- >>118 表示の仕方が良く分からんけど
#include<stdio.h> int main() { int i,j,k; printf("次数を入れてね:"); if((1!=scanf("%d",&k))||(k<2)) { printf("入力ミス"); return 0; } for(i=0;i<k;i++) { for(j=0;j<k;j++) { if(i==j) printf("1 "); else printf("0 "); } printf("\n"); } return 0; }
- 122 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 01:57:46 ]
- >>118
#include <iostream> using namespace std; int main(){ int N; cout << "Input N:"; cin >> N; for(int i=0;i<N;++i){ for(int j=0;j<N;++j) cout << ((i==j)?1:0) << " "; cout << endl; } }
- 123 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 02:49:00 ]
- >>109
大抵は生徒のミス。 先生がミスってると思うのであれば、解答しなくても点くれるよ。
- 124 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 03:17:08 ]
- >>116 以下はR=0.2Ωの場合。RESISTANCE_RがRなので、適当に変えてね。
#include<stdio.h> #define INDUCTANCE_L 0.5 // インダクタンスL [H] #define CAPACITANCE_C 0.5 // 容量C [F] #define VOLTAGE_E 100 // 電圧E [V] #define RESISTANCE_R 0.2 // 抵抗R [Ω] #define TIME_STEP 0.001 // 時間刻み [s] int main() { double current_i; // 電流i [A] double charge_c; // Cの電荷 [C] double voltage_r; // Rの電圧 [V] double voltage_l; // Lの電圧 [V] double voltage_c; // Cの電圧 [V] (=v) int i; current_i = 0; charge_c = 0; for (i = 0; i <= 30000; i ++) { voltage_c = charge_c / CAPACITANCE_C; voltage_r = current_i * RESISTANCE_R; voltage_l = VOLTAGE_E - voltage_r - voltage_c; if (i % 100 == 0) { printf("t=%3.3f[s], i=%3.2f[A], Q_C=%3.2f[C], V_R=%3.2f[V], V_L=%3.2f[V], V_C=%3.2f[V]\n", i*TIME_STEP, current_i, charge_c, voltage_r, voltage_l, voltage_c); } charge_c += current_i * TIME_STEP; current_i += voltage_l / INDUCTANCE_L * TIME_STEP; } return 0; }
- 125 名前:デフォルトの名無しさん [2009/01/17(土) 04:02:42 ]
- >>120さん>>124さん
ありがとうございます。すごく参考になります。
- 126 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 06:32:16 ]
- 丸投げでなくてすみません。あと一歩で完成だと思うのですが、実行するとコンソールの途中で処理が止まってしまいます。
(MPI_SendとMPI_Recvのデッドロック?)どこかを少しいじれば完成なのですが、ご指摘頂けませんか? [1] 並列プログラミング [2] 問題文(含コード&リンク): 整数を昇順にソートするプログラムを並列プログラミングで作成せよ。 mpirun -np 3 ./a.out 9 のように実行すると、3つのプロセスがそれぞれ3要素の乱数配列を作成し、 プロセス内でバブルソートした後にマージ処理を行って全体での昇順に格納します。 例) proc0: array[0]=13, array[1]=7, array[2]=5 proc1: array[0]=9, array[1]=4, array[2]=2 proc2: array[0]=20, array[1]=12, array[2]=10 という乱数配列を生成した場合、まずプロセサ内でバブルソートして proc0: array[0]=5, array[1]=7, array[2]=13 proc1: array[0]=2, array[1]=4, array[2]=9 proc2: array[0]=10, array[1]=12, array[2]=20 とする。最後にマージする。このとき、各プロセス内にarrayと同一個数の メモリを使用してよいが、それ以上のメモリを使ってはならない。 (この例の場合各プロセスはそれぞれtemp_array[3]を使って良い。) proc0: array[0]=2, array[1]=4, array[2]=5 proc1: array[0]=7, array[1]=9, array[2]=10 proc2: array[0]=12, array[1]=13, array[2]=20 僕のプログラムの、74行目から102行目までのどこかがおかしいのだと思います。 www.dotup.org/uploda/www.dotup.org14059.c.html [3] 環境 [3.1] OS:MacOSX [3.2] gcc [3.3] C [4] 期限:1月17日まで
- 127 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 07:49:18 ]
- mpi.h
- 128 名前:126 mailto:sage [2009/01/17(土) 09:14:13 ]
- 原因が判明しました。各処理内で1回だけ処理させるべきところを全てのプロセスに処理させて
しまっていたため、デッドロックになっていたみたいです。 で、そこは修正したのですが、肝心の結果がおかしく、ソートされていません。 理由が解る方いたら教えて下さい。宜しくお願いします。 www.dotup.org/uploda/www.dotup.org14111.c.html
- 129 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 10:15:45 ]
- ソースをもう少し整理してください。
57から59の時点でおかしい気がする。 同じアドレスに複数のCPUで同時にアクセスしたらやばいんじゃない? 並列化するなら分割統治法のソートを用いるべき。
- 130 名前:126 mailto:sage [2009/01/17(土) 10:27:06 ]
- >>129
レス有り難うございます。同じ配列名ですが、CPU個別で別の配列なのでそれぞれソートしてくれるような気がするのですが。。 (最初の乱数配列作成も同じ手順でやっています)とりあえず、57〜59行目を以下のように変更しましたが、ソートはされませんでした。 for(i=0; i<nprocs; i++) { if(mype==i) { bubblesort(array, nlocal); } MPI_Barrier(MPI_COMM_WORLD); }
- 131 名前:129 mailto:sage [2009/01/17(土) 10:36:36 ]
- なにー!?
- 132 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 10:45:33 ]
- >>130
これってどういう挙動のソート? for(p=0; p<nlocal; p++) { for(q=0; q<nlocal; q++) { if(array[p]>temp_array[q]) { array[p]=array[p]^array[q]; array[q]=array[p]^array[q]; array[p]=array[p]^array[q]; } } }
- 133 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 10:48:32 ]
- 全体見てないからわからないけど、まさか p == q のときにif文内実行したりはしないよな?
- 134 名前:126 mailto:sage [2009/01/17(土) 10:58:03 ]
- >>132
ごめんなさい。一部誤りがありました。以下のように修正させて下さい。(修正しても結果はソートされませんでしたが。。) for(p=0; p<nlocal; p++) { for(q=0; q<nlocal; q++) { if(array[p]>temp_array[q]) { array[p]=array[p]^temp_array[q]; //array[q]をtemp_array[q]に変更 array[q]=array[p]^temp_array[q]; //array[q]をtemp_array[q]に変更 array[p]=array[p]^temp_array[q]; //array[q]をtemp_array[q]に変更 } } } この意味するところは、 int dummy; for(p=0; p<nlocal; p++) { for(q=0; q<nlocal; q++) { if(array[p]>temp_array[q]) { dummy=array[p]; array[p]=temp_array[q]; temp_array[q]=dummy; } } } と同一のつもりです。使って良いメモリはプロセスあたりnlocal*2ですので。。 つまり、arrayとtemp_arrayの配列を比較し、arrayに小さい半分の(nlocal個の)整数を格納し、temp_arrayに大きい半分の(nlocal個の)整数を格納したつもりです。
- 135 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 11:13:23 ]
- 同一じゃなあああああああああああーい
array[q]=array[p]^temp_array[q]; -> temp_array[q]=array[p]^temp_array[q];] ってことかな int dummy; for(p=0; p<nlocal; p++) { for(q=0; q<nlocal; q++) { if(array[p]>temp_array[q]) { dummy=array[p]; array[p]=temp_array[q]; temp_array[q]=dummy; } } } の結果はランダムになると考えてよいのか? それとも、ソート処理の一環と考えるべき?
- 136 名前:126 mailto:sage [2009/01/17(土) 11:19:02 ]
- >>133
p==qのときもif処理は実行するようにしています。 例えば、以下のようなケースの場合、 array[0]=2, array[1]=9, array[2]=17 temp_array[0]=1, temp_array[1]=3, temp_array[2]=20 まずarray[0]とtemp_array[0]を比較し、array[0]の方が大きいので交換。 array[0]=1, array[1]=9, array[2]=17 temp_array[0]=2, temp_array[1]=3, temp_array[2]=20 次にarray[0]とtemp_array[1]を比較し、array[0]の方が小さいので何もしない。 次にarray[0]とtemp_array[2]を比較し、array[0]の方が小さいので何もしない。 次にarray[1]とtemp_array[0]を比較し、array[0]の方が大きいので交換。 と続けて行くと、最終的に array[0]=1, array[1]=2, array[2]=3 temp_array[0]=17, temp_array[1]=9, temp_array[2]=20 となるようにするのが意図です。
- 137 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 11:23:32 ]
- >>136
いや array[p]=array[p]^array[q]; みたいにどっちもarrayだったらの話だから気にするな
- 138 名前:126 mailto:sage [2009/01/17(土) 11:35:23 ]
- あっ。。。出来たかもしれません。
最終確認して、正常動作したらアップ致します。
- 139 名前:デフォルトの名無しさん [2009/01/17(土) 11:56:52 ]
- >>121>>122
無事表示されました!ありがとうございます♪
- 140 名前:デフォルトの名無しさん [2009/01/17(土) 12:07:09 ]
- 1] プログラミング
[2] 問題文(含コード&リンク): キーボードから入力された0から1までの数字各々の個数をカウントし、表示するプログラムを作れ (例19003と打ち込めば、1・9・3は1、0が2、他は0) [3] 環境 [3.1] Windows xp [3.2] gcc [3.3] C++ [4] 1月20日 [5] 制限なし お願いします。
- 141 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 12:22:57 ]
- 0から1まで?
- 142 名前:デフォルトの名無しさん [2009/01/17(土) 12:31:26 ]
- あッ、間違えました
0から9までです。
- 143 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 12:39:23 ]
- >>140
#include <stdio.h> #include <string.h> int main() { char buf[256], *ptr; int cnt[10], i; fgets(buf, sizeof(buf), stdin); for(i = 0; i < 10; i++){ cnt[i] = 0; } for(ptr = buf; *ptr != '\0'; ptr++){ if('0' <= *ptr && *ptr <= '9'){ cnt[*ptr - '0']++; } } for(i = 0; i < 10; i++){ printf("%d: %d\n", i, cnt[i]); } return 0; }
- 144 名前:143 mailto:sage [2009/01/17(土) 12:41:00 ]
- #include <string.h>
は余計だった。その行は消してくれ。
- 145 名前:デフォルトの名無しさん [2009/01/17(土) 13:11:56 ]
- 助かりました!
- 146 名前:126 mailto:sage [2009/01/17(土) 13:20:29 ]
- なんか軽くなりすましが入ったようですが、一応クラスタ環境でも
動作しましたのでソースアップしときます。各位コメント有り難う。 www.dotup.org/uploda/www.dotup.org14293.zip.html
- 147 名前:デフォルトの名無しさん [2009/01/17(土) 13:36:13 ]
- ASCIIコードのうち印字可能(空白含む)な文字を表示しなさい。
なお、その際、英数字以外の文字は [ ] で囲みなさい。 お願いします
- 148 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 13:40:08 ]
- #include <stdio.h>
#include <ctype.h> int main(void) { int i; for(i=0; i<256; i++) { if(isprint(i)) { if(isalnum(i)) putchar(i); else printf("[%c]", i); } } return 0; }
- 149 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 13:41:29 ]
- >>147
#include <stdio.h> #include <ctype.h> int main() { int i; for(i = 0; i <= 0xFF; i++){ if(isprint(i)){ if(isalnum(i)){ printf("%c", i); } else { printf("[%c]", i); } } } return 0; }
- 150 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 14:25:18 ]
- >>148
>>149 非常にありがとうございます。
- 151 名前:デフォルトの名無しさん [2009/01/17(土) 15:02:48 ]
- [1] 授業単元:プログラミング1
[2] 問題文(含コード&リンク): int型配列“idata[]”に正の整数値が入っているときに、この配列を渡されて、 戻り値として整数値のうちの最大値を返す関数“idmax”および最小値を返す関数“idmin” を作りなさい。 最大値を返す関数:int idmax(int idata[]) 最小値を返す関数:int idmin(int idata[]) ただし、データの最後を識別するために、最終データの次の配列要素には、 「-1」(マイナス1)が入っているものとする。 また、動作を確認するためのmain関数として、キーボードから正の整数値を 1つずつ読み込み、-1を読み込んだのち、関数idmaxおよびidminを呼び出し、 下記のように、読み込んだ整数値、最大値および最小値をディスプレイに 表示するプログラムをつくりなさい。 読み込んだ整数値の個数は、最大でも10個までとして、main関数を作っても構わない。 _____ディスプレイ______ 読み込んだ整数値:○ △ ◇ □ 最大値:△ 最小値:○ _______________ [3] 環境 [3.1] OS: WindowsXP[3.2] Visual studio[3.3] C言語 [4] 期限: 2009年1月19日まで どなたか、分かる方どうぞよろしくお願いします!!!!
- 152 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 15:55:00 ]
- >>151
#include <stdio.h> int idmax(int idata[]) { int max = *idata; while(*++idata > 0) if(max < *idata) max = *idata; return max; } int idmin(int idata[]) { int min = *idata; while(*++idata > 0) if(min > *idata) min = *idata; return min; } int main(void) { int i, a[11]; for(i=0; i<10; i++) { scanf("%d", a + i); if(a[i] == -1) break;} if(i==10) a[10] = -1; printf("読み込んだ整数値:"); for(i=0; a[i]!=-1; i++) printf("%d ", a[i]); putchar('\n'); printf("最大値:%d\n", idmax(a)); printf("最小値:%d\n", idmin(a)); return 0; }
- 153 名前:デフォルトの名無しさん [2009/01/17(土) 16:32:55 ]
- 文字処理関数の使用例において、文字の入力に、「scanf("%c", &c);」を使うと
is○○関数で上手く判定が出来ないのはなぜですか?
- 154 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 16:35:21 ]
- >>153
どうせ改行文字がバッファに残ってるせいなんだんだろうな
- 155 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 16:39:04 ]
- >153
標準入力からはいったん文字列で読み込むようにして sscanf(文字列, "%c", &c); ではどうだろうか?
- 156 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 16:43:06 ]
- >>153
scanf() で %c を指定すると、1バイトのデータしか入力しません。 'A' を入力すれば、0x41 です。 int型変数 c は、例えば宣言時に不定値が設定されていて 0xffff だったとすると、 それに 0x41 だけを入力するので、0xff41 になってしまいます。 これでは is○○関数では正しい判断は行えません。 回避策ですが、scanf を使わずに、getchar を使う(getchar関数は int型の文字を返却します)。 もしくは、宣言時に int c = 0; とし、0 で変数を初期化するかです。
- 157 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 16:46:19 ]
- cがintってどっから出てきた?
- 158 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 16:48:15 ]
- >int型変数 c は、例えば宣言時に不定値が設定されていて 0xffff だったとすると、
>それに 0x41 だけを入力するので、0xff41 になってしまいます。 >153 のどこにそんなことが書いてあるんだろう? >154 の推理もすごいけどw
- 159 名前:115 mailto:sage [2009/01/17(土) 17:07:19 ]
- >>115に関して説明不足ですみません。
科目Aの成績と科目Bの成績があって、 それぞれの成績について平均、標準偏差、偏差値を求めるということです。 順位は科目A+Bの成績で出します。 ちなみに実際のファイルの中身はこんな感じ↓ 1234567●●●● 1042
- 160 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 17:33:03 ]
- ファイルアップしたほうがはやくね?
- 161 名前:デフォルトの名無しさん [2009/01/17(土) 17:33:57 ]
- [1] 授業単元:Computer Prigramming II 第14回:木(ツリー)構造,再帰的関数と再帰的呼び出し
[2] 問題文(含コード&リンク): 下の入出力例のように,適当な数字を入れると,1からその数までの和が計算過程とともに 表示されるプログラムを作りなさい。ループ(for)文を使うものと再帰的関数を使用するも のの2種類の解答を作ること。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8662.txt [3] 環境 [3.1] OS:Windows Vista / Linux [3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition / gcc [3.3] 言語:C [4] 期限:2008年1月25日00:00まで [5] その他の制限:
- 162 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 17:44:47 ]
- 【質問テンプレ】
[1] 授業単元:プログラミング言語 [2] 問題文(含コード&リンク): 問題3(戻り値がない場合の引数あり) 平行四辺形の底辺tと逆さhを入力して、平行四辺形の面積を求めるプログラムを作りなさい。 ただし、main関数で平行四辺形の底辺tと高さhの入力を行い、 平行四辺形の面積の計算と表示はmensekiという関数で行うこと。 問題4(戻り値がある場合の引数あり) 平行四辺形の底辺tと高さhを入力して、平行四辺形の面積を求めるプログラムを作りなさい。 ただしmain関数で平行四辺形の底辺tと高さhの入力と計算された円の面積の表示を行い、 平行四辺形の面積はmensekiという関数で計算するようにする。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5 [3.3] 言語:C言語 [4] 期限:2009年01月19日まで [5] その他の制限:習い始めて半年です、数学関数まで進みました。 よろしくお願いします。
- 163 名前:デフォルトの名無しさん [2009/01/17(土) 17:54:02 ]
- 文字処理関数の演習問題
16進数に変換可能な文字列(例えば "AB45")をキーボードから入力し、 10進数の数値に変換しなさい。 わかる方教えてください。。
- 164 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 18:07:44 ]
- >>162
問題3 #include <stdio.h> void menseki(double t, double h) { printf("平行四辺形の面積は%lfです\n", t * h); return; } int main() { double t, h; printf("底辺: "); scanf("%lf", &t); printf("高さ: "); scanf("%lf", &h); menseki(t, h); return 0; }
- 165 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 18:09:30 ]
- >>162
問題4 円の面積って何だ #include <stdio.h> double menseki(double t, double h) { return t*h; } int main() { double t, h; printf("底辺: "); scanf("%lf", &t); printf("高さ: "); scanf("%lf", &h); menseki(t, h); printf("平行四辺形の面積は%lfです\n", menseki(t, h)); return 0; }
- 166 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 18:13:41 ]
- >>161
入出力例を見ると和を入力しているが、入力するのは和なのか? 3を入力→1+2+3を求めるではなく、 3を入力→1+2=3まで計算、なのか?
- 167 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 18:20:56 ]
- >>163
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> int do_hex(char *str) { static const char hex[] = "0123456789abcdef"; static const int digit = sizeof(hex) - 1; int ch, ret = 0; char *p; while(*str != '\0'){ ch = tolower(*str); p = strchr(hex, ch); if(p == NULL){ fprintf(stderr, "卑猥な文字:%c\n", *str); exit(1); } ret = digit * ret + (int)(p - hex); str++; } return ret; } int main(void) { char buf[256]; scanf("%255s", buf); printf("%s(16) -> %d(10)\n", buf, do_hex(buf)); return 0; }
- 168 名前:デフォルトの名無しさん [2009/01/17(土) 18:25:34 ]
- >>167
もっと簡潔に書けるよ
- 169 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 18:30:10 ]
- >>168 こうか?
#include <stdio.h> #include <stdlib.h> int main(void) { int ret, hex; ret = scanf("%x", &hex); if(ret != 1){ fprintf(stderr, "俺にも彼女ができる\n"); exit(1); } printf("%x(16) -> %d\n", hex, hex); return 0; }
- 170 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 18:35:02 ]
- >>159
フォーマットは各行に「学籍番号が7桁、名前が10文字、成績1が2桁、成績2が2桁」が隙間無く並んでいるってことでいいんだよね? kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8666.txt
- 171 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 18:36:58 ]
- みなさんcのコンパイラは
何をお使いでしょうか? おすすめや これは使えないというものはありますか??
- 172 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 18:42:56 ]
- >>171
スレ違いだから消えろ
- 173 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 18:43:13 ]
- >>171
スレチ。 pc11.2ch.net/test/read.cgi/tech/1231564903/
- 174 名前:162 mailto:sage [2009/01/17(土) 18:45:48 ]
- >>164-165
ありがとうございます!助かりました。 円の面積・・・意味不明ですね、気付きませんでした。 プリント見返してみましたけど円って書いてありますw 先生のミスかな。
- 175 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 19:22:28 ]
- >>172 >>173 wwwwwwwwwwwwwwwwww
>>172 >>173 wwwwwwwwwwwwwwwwww >>172 >>173 wwwwwwwwwwwwwwwwww
- 176 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 19:52:09 ]
- gccかclでいいんじゃないかとおもうけど
bccってどうなの?
- 177 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 19:57:30 ]
- >>176
Windowsでgccって微妙じゃね?
- 178 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 20:07:42 ]
- 悲しいかな、C関連で一番勢いの大きいスレッドなので、ウザイ自演も沸く・・・
- 179 名前:115 mailto:sage [2009/01/17(土) 22:08:32 ]
- >>170
そのとおりです、ありがとうございます。助かりました・・・。
- 180 名前:115 mailto:sage [2009/01/17(土) 22:53:18 ]
- 何度もすみませんorz
>>170のを実行してみたらエラーが出て実行できないんですがどこがおかしいんでしょうか・・・
- 181 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 22:55:45 ]
- >>180
>>1 ・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
- 182 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 23:09:26 ]
- 115.txtを探す旅
- 183 名前:115 mailto:sage [2009/01/17(土) 23:29:59 ]
- >>182
いくら自分が間抜けでプログラム苦手とはいえそれはさすがにないw 自力でどうにか出来そうな箇所を弄ったら102個あったエラーが30個にはなったんですが もうこれ以上は自力じゃ無理orz ここでひとつひとつコピペするのも難なので、全部まとめてコピペしてロダに上げておきます・・・。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8669.txt
- 184 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 23:46:46 ]
- >>183
手直ししたなら、そのプログラムも上げてくれ 多分 grade_t のどっかがおかしいんだと思う
- 185 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 23:50:18 ]
- >>180
> >>170のを実行してみたらエラーが出て実行できないんですがどこがおかしいんでしょうか・・・ 先生!>>183が実行時エラーじゃありません!!!
- 186 名前:170 mailto:sage [2009/01/18(日) 00:15:38 ]
- あー、VC++だと変数宣言を全部ブロックの先頭に書かないといけないんだっけ?
- 187 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 00:20:41 ]
- >>186
いや全く関係ないけど。
- 188 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 00:22:52 ]
- >>180
>>170 の const grade_t *x = a; const grade_t *y = b; を const grade_t *x = (const grade_t *)a; const grade_t *y = (const grade_t *)b; に書き換えてもダメか? (*.cppとしてコンパイルしていると想定)
- 189 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 00:24:12 ]
- const grade_t *x = (grade_t*)a;
const grade_t *y = (grade_t*)b; に変えればとりあえず動くけどフォーマット指定したファイルも出してくれないと ファイル作るの面倒です^;^
- 190 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 00:57:16 ]
- &grades[i].numberという書き方はキライだな(個人的には)
&(grades[i].number)と書きたい
- 191 名前:デフォルトの名無しさん [2009/01/18(日) 00:59:54 ]
- 宿題で関数strcpyを自分で作らなければいけません。
自分で作ってみたのですが、うまくいきませんでした。 char *my_strcpy(char *s1, char *s2){ int i = 0; while(s2[i] != '\0'){ s1[i] = *s2; i++; } *s1 = '\0'; return s1; } どこをどう直せばいいのか教えてください。 お願いします。
- 192 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 01:01:14 ]
- >>191
www.bohyoh.com/CandCPP/C/Library/strcpy.html
- 193 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 01:03:08 ]
- >>191
s1[i] = s2[i]; s1[i] = '\0';
- 194 名前:デフォルトの名無しさん [2009/01/18(日) 01:10:39 ]
- >>192 >>193
ありがとうございました。 本当に助かりました。
- 195 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 01:50:13 ]
- >>192
そんなの貼ると、代入式だってファビョられるぞw
- 196 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 02:19:03 ]
- >>195
言われるのはサイトの管理人だから、放っとけよ
- 197 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 02:28:10 ]
- JIS X 3010:2003の定義に従えば、条件式⊂代入式
- 198 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 11:21:05 ]
- >>102
#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #define N 256 int main(void) { char b[N]; int c = 0, w = 0, l = 0; FILE *fp; fgets(b, N, stdin); *strchr(b, '\n') = '\0'; if (!(fp = fopen(b, "r"))) return 1; while (fgets(b, N, fp)) { int i = 0; while(b[i]) { c++; if (!isalpha(b[i++])) w++; } l++; } printf("%d character(s)\n%d word(s)\n%d line(s)\n", c, w, l); fclose(fp); return 0; }
- 199 名前:デフォルトの名無しさん [2009/01/18(日) 13:37:08 ]
- まったくできない。
こんな学部入らなければよかった・・
- 200 名前:デフォルトの名無しさん [2009/01/18(日) 13:45:29 ]
- 大学じゃ、Cの授業なんてなかったなぁ・・・
独学で覚えて仕事にしてるが。
- 201 名前:デフォルトの名無しさん [2009/01/18(日) 15:50:18 ]
- >>93
>1からその数までの和 それなら、45を入力すると 1081 = 1 + 2 + ... + 45 になるはずなのだが。 問題が間違っているのか、出力例が間違っているのかを教えてくれ
- 202 名前:デフォルトの名無しさん [2009/01/18(日) 15:53:32 ]
- >>93
>1からその数までの和 それなら、45を入力すると 1081 = 1 + 2 + ... + 45 になるはずなのだが。 問題が間違っているのか、出力例が間違っているのかを教えてくれ
- 203 名前:201 [2009/01/18(日) 15:54:28 ]
- 連続スマソ
- 204 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 16:25:14 ]
- >>201
自分も、何か変だなとは思ったが、例えば36から45の間の数を入力したら どうするのかと考えたが、問題文を見ると、やはり1〜nまでの和なのかと・・・
- 205 名前:201 [2009/01/18(日) 16:33:34 ]
- 問題が正しいのならば↓
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8671.c 出力例が正しいのならば↓ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8670.c for文は苦手だから書かんかった。ごめん。 暇だったら書くかもしれん
- 206 名前:201 [2009/01/18(日) 16:48:21 ]
- 分かるとは思うけど205は >>93
- 207 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 17:00:54 ]
- [1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8672.txt [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: 不明 [3.3] 言語: C [4] 期限: 2009年01月19日 [5] その他の制限:このような形に表示されるよう求められています↓ www.dotup.org/uploda/www.dotup.org16591.jpg どうか宜しくお願いします
- 208 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 17:05:17 ]
- >>93
forでやった場合、問題に合わせたやつ。 出力例にあわせるのはめんどいからパス。 #include <stdio.h> int sum_n(int); int main() { int i, j, n; printf("Input any integer >"); scanf("%d", &n); for (i = 1; i <= n; i++) { printf("%d = ", sum_n(i)); for (j = 1; j <= i; j++) { printf(" %d %c", j, (j==i ? '\n': '+')); } } printf("Total: %d\n", sum_n(n)); return 0; } int sum_n(int n) { return n * (n + 1) / 2; }
- 209 名前:208 mailto:sage [2009/01/18(日) 17:20:35 ]
- もしかすると、sum_nの中身こっちのほうがいいかも。
int sum_n(int n) { int i; int sum = 0; for(i = 1; i <= n; i++) { sum += i; } return sum; }
- 210 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 17:28:56 ]
- もしかすると、うpロダ使って書き直すのも良いかも
- 211 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 17:51:03 ]
- >>207
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8673.c
- 212 名前:デフォルトの名無しさん [2009/01/18(日) 18:53:11 ]
- 一般ユーティリティ関数の演習問題
* をランダムな個数ずつ、10行画面に出力しなさい。 ただし、最大でも 1行(80個)を越えないこと。 お願いします。
- 213 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 19:00:34 ]
- #include <stdio.h>
#include <stdlib.h> int main(void) { int i,j; for(i=0;i<10;i++){ for(j=0;j<rand()%80+1;j++)printf("*"); printf("\n"); } return 0; }
- 214 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 19:02:59 ]
- >>213
助かりました。ありがとうございます!!
- 215 名前:デフォルトの名無しさん [2009/01/18(日) 19:04:08 ]
- >>213
>j<rand()%80+1 これは思いつかんかったわww ちなみに俺は212ではない
- 216 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 19:06:57 ]
- >>213
j<rand()%80+1 これってループするたびに右辺の値が変わったりしないか? それでも要求仕様は満足するだろうけど
|

|