2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C/C++の宿題を片付けます 64代目

1 :デフォルトの名無しさん:2006/04/30(日) 00:10:57
あなたが解けない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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html

【前スレ】
C/C++の宿題を片付けます 63代目
http://pc8.2ch.net/test/read.cgi/tech/1143405137/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000

2 :デフォルトの名無しさん:2006/04/30(日) 00:11:48
[>>1からついでに色々。]
・同じ講義を受けている人が既に同じ宿題を依頼してるかもしれなせん。
 まずはスレを少しさかのぼって探してみてください。
 それさえ出来ないシメジ野郎はバター焼きにして食っちまうぞ
・解答者は答える義務もないし、答えてもそれが正しいかどうかは保証しません。
 もちろん、出題者先生の意図なんぞ知ったことではありません。
 At your own riskで。
・態度が余りに悪いとすーぱーはかーがあなたの先生にチクるかもしれません。

報告用テンプレ(任意)
[1] 先生の評価:
[2] 提出結果:
[3] 単位取得の有無:
[4] 回答者にコメント(愚痴等は禁止):

3 :デフォルトの名無しさん:2006/04/30(日) 00:22:55
*********************************
 I n f o r m a t i o n
  このスレは未稼働です。
前スレが埋まってから書き込みましょう
*********************************

4 :デフォルトの名無しさん:2006/04/30(日) 01:35:23
【質問】
 http://ysserve.int-univ.com/susi/Lecture/c2/
↑のページの【必須CAI課題】のどれかをクリックして適当に学生の番号入力するとオンラインのコンパイラに飛べますが、
このようなC言語のオンラインコンパイラを自分のHPに設置したいのですがどうしたらいいのでしょうか?

ちなみに自分のHPサービス(sakura.ne.jp)にはCGI,PHP,C言語(gcc)等のコンパイラがあり、パスも分かるのですが
そこからどうしたよいのでようか?
ソースが入力された文章を受け取って、次にgccのパスを・・・どうやったらコンパイルできるのでしょうか?教えてください


ちなみにCやVBといった言語やHPビルダーは使えますが、Webプログラミングの勉強はしたことないので、HPビルダーで出来る程度でお願いします。


(さらにこのオンラインコンパイラだとscanf関数等数値のキーボ−ド入力が出来ないので、余裕があれば改善したいです。HTMLだけじゃ無理そうですが・・)

5 :デフォルトの名無しさん:2006/04/30(日) 02:44:09
前スレでリスト構造についての問題があったけど
俺もわからないんだよなぁ
わかりやすく解説している本かサイトしりませんか?

6 :デフォルトの名無しさん:2006/04/30(日) 03:22:56
>>5
何処の話だよ?それに前スレ埋めてから使え

7 :デフォルトの名無しさん:2006/04/30(日) 03:31:55
使われたくなかったら立てるなよ

8 :デフォルトの名無しさん:2006/04/30(日) 04:05:49
>>4
どうやるも何もperlか何かでフォームデータ受け取って
ファイルに落としてgccに渡すだけだと思うが。

9 :デフォルトの名無しさん:2006/04/30(日) 04:11:17
>>5 多分前スレ626のことだと思うんだが、とりあえず「連結リスト」でググレカス

10 :デフォルトの名無しさん:2006/04/30(日) 04:22:44
アルゴリズムの本で連結リストを解説してないものは無い。
前橋ポインタ本やK&Rなどちょっと気の利いた本なら載ってる。

11 :デフォルトの名無しさん:2006/04/30(日) 06:39:51
とゆうかリスト程度、入門書ですらポインタの説明と併せて載ってると思うが
あれがわからないってのは致命的だろ

12 :デフォルトの名無しさん:2006/04/30(日) 08:00:51
>>4
WebProg に単発質問スレ立てておいてここに粘着かよ。

13 :名無し ◆GJ3fREqUVw :2006/04/30(日) 11:42:08
[1]プログラミング3
[2]1つのプロジェクトに2つのC++ソースファイルを作り
  外部依存フォルダを作りたい。
[3.1]windows XP HomeEditon SP2
[3.2]Mirosoft Visual C++
[3.3]C++
[4]2006年05月08日まで
[5]ないです。

14 :デフォルトの名無しさん:2006/04/30(日) 11:56:32
キュー構造は、先入れ先出し、
スタック構造は、先入れ後出し(壷)、
リスト構造は、追加は、尻尾にいれるのとか、頭に入れるのとかタイプがあるけど、
どこでもイテレーションを使って取り出せる。
イテレーションを使うから、順番に取り出せる。
この辺が他とは違う特徴。
VBAはLIST、イテレータのテクニックが結構詰まってると思う。
ちょっと複数LIST階層構造があって複雑だけど、Explorerもイテレータだな。

15 :デフォルトの名無しさん:2006/04/30(日) 12:14:43
それと、EXPLOREとお気に入りは同じようなLIST構造なようで、けっこー違う
Exploreは順番を入れ替えられないけど、お気に入りはドラッグ&ドロップで順番が変えられる
ここが、見かけ上より、お気に入りがディレクトリより中がからまってる所以

16 :デフォルトの名無しさん:2006/04/30(日) 13:30:00
>>14-15
お前は一体何を言っているんだ?

17 :デフォルトの名無しさん:2006/04/30(日) 13:56:06
Explorer(というかディレクトリ)は木構造

18 :デフォルトの名無しさん:2006/04/30(日) 14:27:13
データ構造なら
つCで学ぶデータ構造とプログラム

19 :デフォルトの名無しさん:2006/04/30(日) 23:31:44
これはまたつまらない埋め方だな
ttp://pc8.2ch.net/test/read.cgi/tech/1143405137/995-1000

20 :デフォルトの名無しさん:2006/04/30(日) 23:45:05
909です。
どうも有難うございました。
ところで、下の"for loop"の中の"if function"で'\0'は何をしているのでしょうか?
よろしくお願いします。

for (i=1 ; abs(password[i-1]-password[i])<=1 ; i++)
if (password[i+1]=='\0')


21 :デフォルトの名無しさん:2006/04/30(日) 23:47:09
YOU それは ブレーキの無い 車だよ

22 :デフォルトの名無しさん:2006/04/30(日) 23:50:39
ブレーキのない車に乗るやつはいない。そうつぶやいて・・・

23 :デフォルトの名無しさん:2006/05/01(月) 00:24:51
[1] 授業単元:プログラミングU
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1810.txt
(このC言語で使われている2つの行列の掛け算を1つの関数で出来るようにする)
[3] .NET(C)
 [3.1] OS:XPSP2
 [3.2] MS .NET ver7.1.3091
 [3.3] 言語: C言語
[4] 期限:2006年5月1日
[5] その他の制限:特にありません

自分でやれるだけやってみたのですが、どうしてもわからなくて…
教えていただけると嬉しいです。

24 :デフォルトの名無しさん:2006/05/01(月) 00:42:56
>>23
一つの関数でってどういう意味?
for文一個ってこと?
それともmc,meを同時に求めるって(ry

25 :デフォルトの名無しさん:2006/05/01(月) 00:45:19
>>23

先生が言うにはコンポーネント、部品の両方を1つの関数で求めることができる。
とのことなのですが…

ヒントに
void mat_mul(int ma[3][4],const int mb[4][7],int mc[3][7])

を、あげていました

26 :デフォルトの名無しさん:2006/05/01(月) 00:46:29
>>23ではなくて>>24氏へのレスです。
失礼しました(´・ω・`)

27 :デフォルトの名無しさん:2006/05/01(月) 00:58:27
とりあえず今の状態でも 「1つの関数で」 求まってるんだが。
問題文を一言一句正確に書きうつしてみ?

28 :デフォルトの名無しさん:2006/05/01(月) 01:00:20
>>27

このプログラムでは、基本的には行列の掛算を2回行い、それぞれの結果を出力する構造になっています。
ただし、行列といっても片方は1行だけですので、プログラムはわずか3行で記述できています。
それでも、プログラミング・テクニックとしては同一の関数を2度利用することができるはずです。
両方で使用する行列のサイズは異なりますが、工夫をすれば克服できます。

これが問題文です。

29 :デフォルトの名無しさん:2006/05/01(月) 01:22:22
こういう事か?

このプログラムでは行列の掛算を2回行っている。
行列の掛算を行う関数を作り、mainから呼び出すように変更せよ。
ただし、どんな行列のサイズでも正しく掛算を行うように工夫すること。
※1回の掛算は3行程度なので、わざわざ関数にするメリットが感じられないかも知れません。
 ですが関数にまとめる事でmainの処理がわかりやすくなり、
 何度も処理を書かなくてすむのでバグの発生を抑えられます。
 プログラミング・テクニックのひとつとして憶えておきましょう。

30 :デフォルトの名無しさん:2006/05/01(月) 01:23:52
>>29

たぶんそういう意図を含んだ問題だと思います(´・ω・`)
自分でも色々やってみたのですが…

31 :デフォルトの名無しさん:2006/05/01(月) 01:41:10
任意のサイズの行列に対応できる関数ねぇ
予想以上に難しそうだな

32 :デフォルトの名無しさん:2006/05/01(月) 01:43:23
>>31

お手数おかけします(´・ω・`)
自分でも諦めずにやってみます…

33 :デフォルトの名無しさん:2006/05/01(月) 02:00:01
任意のサイズの行列は、Cならポインタのポインタ、C++ならvector<vector> &
でいけると思う。

34 :デフォルトの名無しさん:2006/05/01(月) 02:06:19
そろそろできましたか?

35 :デフォルトの名無しさん:2006/05/01(月) 02:07:04
>>33

ポインタを使っても先生はできると言っていましたが、
使わなくてもできるようです(ポインタ使えるなら使えば、みたいな感じでした

別に任意のサイズでなくても、今回の実行結果がアップロードしたファイルと同じ数字で出力されれば問題ないので…(´・ω・`)
ポインタ使うほうが簡単なのかなあ…

36 :23 ◆SEBUhSQF9U :2006/05/01(月) 02:09:19
騙りっぽい方が現れたので、トリップ付けてみます(´・ω・`)
こんな夜遅くに質問にのって頂いて本当に感謝しています。

37 :デフォルトの名無しさん:2006/05/01(月) 02:14:22
ポインタ使わないとすると、「とりあえず10×10の行列を計算する関数を作り、関数呼び出しの前に10×10の行列に変換し、呼び出し後元の行列に戻す」ぐらいしか思いつかないな。
こんなクソみたいなんじゃなくて、何か方法があるのかな?

38 :デフォルトの名無しさん:2006/05/01(月) 02:16:13
いっそ、二次元配列じゃなくて一次元配列にするとかね


39 :23 ◆SEBUhSQF9U :2006/05/01(月) 02:17:03
>>37

あー、そういえばアシスタントの人が「とりあえず10×10の行列を計算する関数を作り」みたいなことを
言っていました。

そのプログラムでも構いませんので、一度教えていただけないでしょうか?

40 :デフォルトの名無しさん:2006/05/01(月) 02:18:05
それを早く(ry

41 :デフォルトの名無しさん:2006/05/01(月) 02:19:09
別にポインタ使ってもいいだろ
わざわざ変な方法でするメリット無いし

42 :デフォルトの名無しさん:2006/05/01(月) 02:19:50
教授は常に最適解を知っている

43 :23 ◆SEBUhSQF9U :2006/05/01(月) 02:22:24
>>40

もっと早く言うべきでした(´・ω・`)申し訳ありません

>>41

ポインタのほうがいいとは思うのですが、とりあえず1つの関数にまとまっていれば
回答にはなっていると思うので。質問している側がこんな事言ってしまうのも失礼だとは思いますが。

44 :デフォルトの名無しさん:2006/05/01(月) 02:24:59
ポインタのポインタを使ったとしても、アクセスは普通に a[i][j] と
書けるけどな。

但し、関数の引数は **a になり、あと行と列の大きさを m, n の
ような感じで一緒に渡さないといけない。

普通はこういう時はひっくるめて構造体にしてしまうんだけど、今の
問題の場合はそこまでしない方がいいな。

45 :デフォルトの名無しさん:2006/05/01(月) 02:29:00
あとあれか。ポインタのポインタの場合、一つめのポインタは、「一次元の
配列へのポインタ」となるので、今回のように普通の二次元配列で初期化
しているものをそのまま渡す事はできない。

行の先頭のポインタ配列を作って、そこにそれぞれの行の先頭ポインタを
代入して、変換して渡す必要がある。

46 :23 ◆SEBUhSQF9U :2006/05/01(月) 02:32:19
>>44 >>45

ふむう…、やっぱりポインタは難しいですね(´・ω・`)どんな受け渡しが起こってるのか中々イメージしにくいです
ポインタ使わない場合はサイズの大きい行列を作って、そこで受け渡しをすればよろしいのでしょうか?

47 :デフォルトの名無しさん:2006/05/01(月) 02:33:48
よろし

48 :デフォルトの名無しさん:2006/05/01(月) 02:47:21
こんなんでいんじゃねぇの?

int mmul(int *ma, size_t marow, size_t macol, int *mb, size_t mbrow, size_t mbcol, int *mc){
 int i, j, k;
 if ( macol != mbrow ) return 0;
 for (i=0;i<marow;i++) for(j=0;j<mbcol;j++) for(k=0;k<macol;k++) mc[i*mbcol+j]=mc[i*mbcol+j]+ma[i*macol+k]*mb[k*mbcol+j];
 return 1;
}

呼出側は
mmul(&ma[0][0], 1, 3, &mb[0][0], 3, 4, &mc[0][0]);
mmul(&mc[0][0], 1, 4, &md[0][0], 4, 7, &me[0][0]);

ポインタのポインタと2次元配列が違うものってのは分かってるよな?

49 :23 ◆SEBUhSQF9U :2006/05/01(月) 02:47:39
んー、ダメだ(´・ω・`)エラーでちゃう。
10×10行列の方法でやろうとしてるのですが…

50 :23 ◆SEBUhSQF9U :2006/05/01(月) 02:49:05
>>48

自分で組み込んで試してみます…。わざわざすみません。

51 :デフォルトの名無しさん:2006/05/01(月) 02:52:16
>>49
でかい行列で渡すときは
 hoge(int m[100][100], int row, int col);

 int ma[3][4];
 hoge(ma, 3, 4);
とかやったらいかんぞ。
 int ma[3][4];
 int temp[100][100] = {0};
 for(i=0;i<3;++i)for(j=0;j<4;++j) temp[i][j] = ma[i][j];
 hoge(temp, 3, 4);
というふうに、同じサイズのものに入れなおさんと。

52 :23 ◆SEBUhSQF9U :2006/05/01(月) 02:55:08
>>48さんの関数を組み込んだら問題なく動作しました…
本当にありがとうございます。

>>51
この場合は[100][100]のtempの行列が別途必要という事でしょうか。
そちらのバージョンもやってみようと思います。
ありがとうございました。

53 :シリアス ◆UV8VW4VRAk :2006/05/01(月) 03:29:49
Cでシリアル通信リソースを作れっていう課題をやっているところですが,
たとえば入力した文字列をシリアルに送るとき

char buff[128];
DWORD dwWritten;
scanf("%s", &buff);
WriteFile(hComm, buff, stren(buff), &dwWritten, NULL);

みたいにすればいいと思いますがなぜかうまくいきません、なんでですかね?

54 :デフォルトの名無しさん:2006/05/01(月) 03:31:19
>>1も読めない池沼だから

55 :23 ◆SEBUhSQF9U :2006/05/01(月) 03:32:50
一応課題はこれで出来てしまったので、質問取り下げておきます。
夜遅くまで付き合っていただいて本当に有難うございました。

56 :23 ◆SEBUhSQF9U :2006/05/01(月) 03:34:05
あ、sage忘れた…(´・ω・`)
最後の最後にやらかしちゃってすみません。

57 :デフォルトの名無しさん:2006/05/01(月) 07:42:39
またこい ノシ

58 :超初心中の初心者:2006/05/01(月) 09:28:50
C++の練習問題やってるところですが・・・
<問題>
要素数が7で要素型がint型である配列の全要素を逆順に並べかえるプログラムを作成せよ。
並べ替えた配列を1行ずつ表示する。

・・・教えてもらえると嬉しいが・・・助けて;;;

59 :デフォルトの名無しさん:2006/05/01(月) 09:35:44
int* p = a;
int* q = a + sizeof(a) / sizeof(a[0]) - 1;

while (p != q) {
 int t = *p;
 *p++ = *q;
 *q++ = t;
}

60 :デフォルトの名無しさん:2006/05/01(月) 09:54:54
std::reverse(a , a + sizeof(a)/sizeof(a[0]) );

61 :超初心中の初心者:2006/05/01(月) 10:20:41
・・・sizeofってサイズ調べるため使うですよね?


62 :デフォルトの名無しさん:2006/05/01(月) 10:24:08
うん

63 :デフォルトの名無しさん:2006/05/01(月) 10:24:58


64 :超初心中の初心者:2006/05/01(月) 10:32:20
>>59 のコード内容見ても意味分からない;;;
マジバカですいません_| ̄|○;;;;
解説plz;;;;

65 :デフォルトの名無しさん:2006/05/01(月) 10:34:03
a は配列

66 :デフォルトの名無しさん:2006/05/01(月) 10:44:09
>>64

int a[7];

それから *q++ は *q-- の間違いだな。

67 :デフォルトの名無しさん:2006/05/01(月) 10:45:24
同じく超初心者の俺が解説してやろうか

68 :デフォルトの名無しさん:2006/05/01(月) 10:46:01
たのんます

69 :超初心中の初心者:2006/05/01(月) 10:52:28
int a[7]←int型の配列[要素数]
*q++←ってポインタの内容をプラス1しながら繰り返すってこと?

70 :デフォルトの名無しさん:2006/05/01(月) 10:54:23
そっすな

71 :デフォルトの名無しさん:2006/05/01(月) 10:55:17
超初心者による解説なので間違ってたらゴメリンコ

int a[] = {1,2,3,4,5,6,7}, i;
// 配列aの最初の位置をポインタpに保存
int* p = a;
// 配列aの最後の要素の位置をポインタqに保存
// 最初の位置+配列の要素の個数−1
int* q = a + sizeof(a) / sizeof(a[0]) - 1;

// ポインタpとqがぶつかるまで繰り返す
while (p != q) {
// ポインタpが指す値をtに一時保存しておく
int t = *p;
// ポインタqが指す値をpが指す配列要素に代入、pを1進める
*p++ = *q;
// tの値をポインタqが指す要素に代入し、qを1戻す
*q-- = t;
}

for (i = 0; i < 7; i++){
printf("%d", a[i]);
}

72 :超初心中の初心者:2006/05/01(月) 10:57:14
int* q = a + sizeof(a) / sizeof(a[0]) - 1; ←はなんですか?
直接ポインタの中に式を入れる??


73 :デフォルトの名無しさん:2006/05/01(月) 11:02:33
入れてるのは式を計算した結果の値な。

74 :超初心中の初心者:2006/05/01(月) 11:07:57
実行できましたw
>>71 分かりやすい解説ありがとうw
そのほかの方もありがとうw

75 :超初心中の初心者:2006/05/01(月) 11:21:40
さて、あと2問ありますが・・・
<問題1>
文字列str内の全ての数字文字を削除する関数

void del_digit(char *str){* /・・・/*}

を添字演算子を用いずに作成せよ(例えば、”AB1C9”を受け取ったら、”ABC”とする)
そして、mainから関数del_digitを呼び出して、以下のように表示する

str = XXX

<問題2>
二つの整数n1とn2の和、差、積をsum,diff,mulが指す変数に格納する関数

void sum_diff_mul(int n1,int n2,int *sum,int *diff, int *mul){/*・・・*/}

を作成せよ。

mainより sum_diff_mul 関数を呼び出して結果を以下のように表示する。

  和はXXです。
  差はXXです。
  積はXXです。


問題の解説お願いいたします_| ̄|○;;;;

76 :デフォルトの名無しさん:2006/05/01(月) 11:23:19
while (p != q) {
じゃなくて
while (p < q) {
じゃないか?

77 :デフォルトの名無しさん:2006/05/01(月) 11:35:05
> 「ありさん、おねがいです。たべる ものをください。おなかが すいて しにそうです。」
>  ありたちは びっくりしました。
> 「きりぎりすさんじゃ ありませんか。なつの あいだは うたってばかり いたから、
> いまごろは おどりを おどってでも いるかと おもって いたのに。さあ、どうぞ。」
>  そう いって、ごちそうを わけて あげました。
> (久保喬 偕成社『イソップものがたり』)

キリギリスでも別にいいや。

78 :77:2006/05/01(月) 11:35:54
誤爆スマソ

79 :デフォルトの名無しさん:2006/05/01(月) 11:50:22
起きぬけだがやってみる。

void del_digit(char *str){
char c;
char *d = str;
while(1){
c = *str++;
*d = c;
if(!c){
break;
}else if(c < '0' || '9' < c){
d++;
}
}
}

void sum_diff_mul(int n1,int n2,int *sum,int *diff, int *mul){
*sum = n1+n2;
*diff = n1-n2;
*mul = n1*n2;
}


80 :超初心中の初心者:2006/05/01(月) 11:56:57
これからお出かけなので、
とりあえず夜戻ってきたら続くやりますんで、
よろしくお願いします。

81 :デフォルトの名無しさん:2006/05/01(月) 12:19:44
[1] 授業単元:プログラミング通論
[2] 問題文(含コード&リンク):
typedef int elementtype;
struct stack {
int top;
elementtype elements[1024];
};

/* ここにpushとpopの関数を定義せよ */

int main(void) {
struct stack S;
elementtype x;
initstack(&S);
push(&S, 1), push(&S, 2), push(&S, 3), push(&S, 4), push(&S, 5);
printf("%d", pop(&S)), x=pop(&S);
printf("%d", pop(&S)), x=pop(&S);
printf("%d", pop(&S)), x=pop(&S);
}

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5月2日まで
[5] その他の制限:
void push(struct stack *S, elementtype x){
S->top++;
S->elements[S->top] = x;
}
このような感じになるとおもうのですが、至らないところがあるためコンパイルできません
何卒よろしくお願いします

82 :デフォルトの名無しさん:2006/05/01(月) 12:31:28
void push(struct stack *S, elementtype x) {
S->elements[S->top++] = x;
}

elementtype pop(struct stack *S) {
return S->elements[--S->top];
}

未チェック。

83 :デフォルトの名無しさん:2006/05/01(月) 12:33:13
ん、initstackの内容によっちゃマズいことになるやもわからんね。

84 :デフォルトの名無しさん:2006/05/01(月) 12:40:02
#include <stdio.h>

中略

elementtype pop(struct stack *S) {
 return(S->top==-1 ? 0 : S->elements[S->top--]);
}

void initstack(struct stack *S) {
 S->top=-1;
 return;
}

以下、略

85 :デフォルトの名無しさん:2006/05/01(月) 15:55:39
[1] 授業単元: 線形リスト
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: Mac OS X 10
 [3.2] コンパイラ名とバージョン:ターミナル 1.4.6
 [3.3] 言語: C
[4] 期限: 5月2日15時まで
[5] その他の制限: なし

コンビニの商品管理プログラムを作りなさい
という課題なのですが。
まず、何から手を付けたらいいかがわかりません。
どなたかご教授頂けたら幸いです。

[課題]
商品の仕入れや売上の管理を行う。
各商品は線型リストに格納する。リストは商品IDの小さな順に並 べる。
操作はファイルとして読み込む。
商品は商品ID、名前、値段、個数というデータをもつ。

操作のコマンド
add 商品ID 名前 値段 個数 (商品の登録、追加)
sell 商品ID 個数 (商品を売却)
dell 商品ID (商品の削除)
price 商品ID 値段 (商品の値段変更)
print (現在の売上げと在庫状況を表示)

86 :85:2006/05/01(月) 15:56:21
ファイルのサンプル
入力 
add1234apple503
add1432banana1454
sell12342
price1432155
dell1432
print

出力
売り上げは100円です.
現在の在庫は以下の通りです.
1234apple50円1個

87 :デフォルトの名無しさん:2006/05/01(月) 17:50:06
>>85
>>86のサンプルは課題に入ってたのか?
それともおまいさんがそうしようと思ったのか?

88 :デフォルトの名無しさん:2006/05/01(月) 17:52:27
今、プログラムかいてて線形リストじゃなくて配列でもいいんじゃないかと思った俺がいる

89 :デフォルトの名無しさん:2006/05/01(月) 18:00:06
仕様をざっと読んだだけだが、下手にリストにするより配列の方がいいだろ
もしくはリスト上はソートせずに常にpush_backしておいて
各ノードへのポインタを格納した配列をソートしておく

90 :デフォルトの名無しさん:2006/05/01(月) 18:05:31
結構いい課題だな
ファイルの入出力からソートや構造体はては線形リストまで
これ作ったら相当力つくような気がする

まあ、全部書くと結構面倒だけど

91 :デフォルトの名無しさん:2006/05/01(月) 18:08:18
>>85
>>商品の仕入れや売上の管理を行う
これを満たすプログラムを組めばよろしいかと

92 :デフォルトの名無しさん:2006/05/01(月) 18:18:06
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
キューQには 5 4 2 -4 2 -1 3 -2 5 -3 -1 と入っているものとする
/* */ を定義し、hatena は何をする関数か答えよ

typedef int elementtype;

/* ここに stack, queue の関数定義 */

void operator(struct stack *S, elementtype e) {
elementtype arg1, arg2;
arg2 = pop(S), arg1 = pop(S);
if(e == -1) push(S, arg1 + arg2);
else if(e == -2) push(S, arg1 - arg2);
else if(e == -3) push(S, arg1 * arg2);
else if(e == -4) push(S, arg1 / arg2);
}

93 :92:2006/05/01(月) 18:18:38
void hatena(struct quene *Q) {
struct stack S; elementtyape e;
initstack(&S);
while(!queueempty(Q)){
e=getq(Q);
if(e>=0) push(&S, e);
else operator(&S, e); }
e = pop(&S);
printf("%d\n", e);
}
void main() {
/* 変数Qの宣言とキューの中身の設定 */
hatena(&Q);
}
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5/2 12:00

94 :92:2006/05/01(月) 19:33:39
所々、タイプミスがありますが

while(!queueempty(Q)) {
これはどういう条件下で実行されるかのか教えてもらえませんか?

95 :デフォルトの名無しさん:2006/05/01(月) 19:40:02
queueempty(Q)==0

96 :デフォルトの名無しさん:2006/05/01(月) 19:55:45
>>85
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1813.txt
とりあえず、中途半端だが
”リストは商品IDの小さな順に並べる”がやってない

入力データは以下のようにスペースで区切らないと
たぶん認識しないけどこれでおk?
add 1234 apple 50 3
add 1432 banana 145 4
sell 1234 2
price 1432 155
del 1432
print

97 :デフォルトの名無しさん:2006/05/01(月) 21:16:36
【問題】線形検索
以下のプログラムを検索条件に当てはまるデータが複数あったら全て表示するように変更せよ。
【プログラム】
#include <stdio.h>
#define KAIIN_NUM 10
int main(int argc, char* argv[])
int kaiin[] = { 555, 222, 789, 444, 456, 666, 123, 777, 111, 333 };
int n;
int i;
printf("会員番号:");
scanf("%d", &n);
i = 0;
while (kaiin[i] != n)
{
i++;
if (i >= KAIIN_NUM)
{
printf("見つかりません。\n");
return 0;
}
}
printf("%d番目に見つかりました。\n", i);
return 0;
}

98 :デフォルトの名無しさん:2006/05/01(月) 21:23:08
>>97
#include <stdio.h>
#define KAIIN_NUM 10
int main(int argc, char* argv[]){
int kaiin[] = { 555, 222, 789, 444, 456, 666, 123, 777, 555, 333 }, n, i, f=0;
printf("会員番号:");
scanf("%d", &n);
for(i = 0; i < KAIIN_NUM; i++)
if(n == kaiin[i])
printf("%d番目で見つかりました\n", i), f++;
if(!f)printf("見つかりません\n");
return 0;
}

99 :デフォルトの名無しさん:2006/05/01(月) 21:25:05
97です。第2問
【問題】線形検索
以下のプログラムを検索条件に当てはまるデータが複数あったら全て表示するように変更せよ
【プログラム】
#include <stdio.h>
#define KAIIN_NUM 10
int main(int argc, char* argv[])
{
int kaiin[] = { 555, 222, 789, 444, 456, 666, 123, 777, 111, 333, 0 };
int n;
int i;
printf("会員番号:");
scanf("%d", &n);
kaiin[KAIIN_NUM] = n;
i = 0;
while (kaiin[i] != n)
{
i++;
}
if (i == KAIIN_NUM)
{
printf("見つかりません。\n");
}
else
{
printf("%d番目に見つかりました。\n", i);
}
return 0;
}

100 :デフォルトの名無しさん:2006/05/01(月) 21:40:32
>>99追記。
馬兵法使っています。
お願いします。

101 :デフォルトの名無しさん:2006/05/01(月) 21:42:26
>>100 訂正。
馬兵→番兵 でした。

102 :デフォルトの名無しさん:2006/05/01(月) 21:43:14
うん、分かってる

103 :デフォルトの名無しさん:2006/05/01(月) 21:46:54
//未テスト
#include <stdio.h>
#define KAIIN_NUM 10
int main(int argc, char* argv[])
{
int kaiin[] = { 555, 222, 789, 444, 456, 666, 123, 777, 111, 333, 0 };
int n;
int i;
int hit;
printf("会員番号:");
scanf("%d", &n);
kaiin[KAIIN_NUM] = n;
i = 0;
hit = 0;
while (i != KAIIN_NUM)
{
if (kaiin[i] = n)
{
printf("%d番目に見つかりました。\n", i);
hit = 1;
}
i++;
}
if (hit = 0)
{
printf("見つかりません。\n");
}
return 0;
}


104 :デフォルトの名無しさん:2006/05/01(月) 21:49:30
>>103動作しました。ありがとうございました。

>>98のプログラムってこれでいいですか? 実行結果が97と変化がないんですけど。

105 :デフォルトの名無しさん:2006/05/01(月) 21:49:34
#include <stdio.h>
#define KAIIN_NUM 10
int main(int argc, char* argv[]){
int kaiin[] = { 555, 222, 789, 444, 456, 666, 123, 777, 555, 333, 0 };
int n, i = 0, f = 0;
printf("会員番号:");
scanf("%d", &n);
kaiin[KAIIN_NUM] = n;
while (i < KAIIN_NUM + 1){
if(kaiin[i] == n){
if( i != KAIIN_NUM) printf("%d\n", i), f++;
else if(!f) printf("見つからない\n");
}
i++;
}
return 0;
}


106 :デフォルトの名無しさん:2006/05/01(月) 21:52:39
っていか、>97のは動かないって
main()の'{'がないんだもんよ

107 :デフォルトの名無しさん:2006/05/01(月) 21:55:19
>>103
while(i!=KAIIN_NUM) だと番兵の意味ないような…

108 :デフォルトの名無しさん:2006/05/01(月) 22:00:06
>>92-93をどなたかお願いします!

109 :デフォルトの名無しさん:2006/05/01(月) 22:15:52
>>108
スタックとキューの関数定義
何と何と何が必要?
スタック、キューの構造体宣言もやるの?
スタック、キューは配列でやっちゃていいの?


110 :デフォルトの名無しさん:2006/05/01(月) 22:24:18
struct stack {
int top;
elementtype s[MAX];
};
struct queue {
int rear, front;
elementtype q[MAX];
};
void push(struct stack *S, elementtype e){
S->top++;
S->s[S->top] = e;
}
elementtype pop(struct stack *S) {
return S->s[S->top--];
}
void putq(struct queue *Q, elementtype x){
Q->rear++;
Q->q[Q->rear] = x;
}
elementtype getq(struct queue *Q) {
Q->front++;
return Q->q[Q->front--];
}
void initstack(struct stack *S) {
S->top=-1;
}
void queueempty(struct queue *Q) {
Q->rear = Q->front = -1;
}

111 :デフォルトの名無しさん:2006/05/01(月) 22:25:43
void main() {
struct queue Q; elementtype x;
queueempty(&Q);
putq(&Q, 5); putq(&Q, 4); putq(&Q, 2); putq(&Q, -4); putq(&Q, 2);
putq(&Q, -1); putq(&Q, 3); putq(&Q, -2); putq(&Q, 5); putq(&Q, -3); putq(&Q, -1);
hatena(&Q);
}

>>109さんへ
今はこんな感じで作ってるのですがコンパイルできないのでご指導を承りたいです・・・

112 :デフォルトの名無しさん:2006/05/01(月) 22:34:08
なぜエラーメッセージを貼らないのか

113 :デフォルトの名無しさん:2006/05/01(月) 22:35:55
関数名operatorはやめい
queueemptyがvoidなのにwhileループをまわす意味が分からん

114 :デフォルトの名無しさん:2006/05/01(月) 22:36:01
すみません・・・
エラー E2293 pro.cpp 44: ) が必要
エラー E2330 pro.cpp 44: 演算子は関数として宣言しなければならない

/* 44行目はこの関数の1行目です */
void operator(struct stack *S, elementtype e) {
elementtype arg1, arg2;
arg2 = pop(S); arg1 = pop(S);
if(e == -1) push(S, arg1 + arg2);
else if(e == -2) push(S, arg1 - arg2);
else if(e == -3) push(S, arg1 * arg2);
else if(e == -4) push(S, arg1 / arg2);
}

115 :デフォルトの名無しさん:2006/05/01(月) 22:37:38
operator は予約語だから使っちゃダメ。

116 :デフォルトの名無しさん:2006/05/01(月) 22:39:38
Cだからoperatorは予約語じゃねーよ。
......と言ってもC++との互換性を考えると使わんほうが良いのは間違いないけど

117 :デフォルトの名無しさん:2006/05/01(月) 22:42:58
>>116 なんか拡張子が cpp

118 :デフォルトの名無しさん:2006/05/01(月) 22:45:05
家で使っているコンパイラがC++に対応してるみたいです、すみません

operatorを適当に変えて、queueemptyをintに変えてみたらコンパイルはできました!
でも、実際の答えは10らしいのですが結果が-2になってしまいました・・・
また考え直してみますが、間違っているところが分かったお方がいれば教えてくださいませ

119 :デフォルトの名無しさん:2006/05/01(月) 22:46:54
queueemptyは何を返すようにしたんだ?

120 :116:2006/05/01(月) 22:49:47
>>117 Σ(゚Д゚;
ゴメン俺が悪かった  

121 :デフォルトの名無しさん:2006/05/01(月) 22:50:22
>>119
あ!return を使わないとダメなんですね・・・
if文を使って考えなおしてみます

122 :デフォルトの名無しさん:2006/05/01(月) 23:28:52
もしよければ>>92-93の結果が10になるのか教えてもらえませんか?

123 :デフォルトの名無しさん:2006/05/01(月) 23:30:19
>>122訂正。結果が(どう実行して)10になるのか

124 :デフォルトの名無しさん:2006/05/01(月) 23:37:00
[ ]内が実行箇所

5 [4 2 /] 2 + 3 - 5 * +
5 [2 2 +] 3 - 5 * +
5 [4 3 -] 5 * +
5 [1 5 *] +
[5 5 +]
10


125 :デフォルトの名無しさん:2006/05/01(月) 23:39:33
ありがとうございます!お風呂に入ってもうひとがんばりします

126 :デフォルトの名無しさん:2006/05/02(火) 01:01:57
もう、できてるかも試練が
elementtype getq(struct queue *Q){
Q->front++;
return Q->q[Q->front]; //直した
}
void initqueue(struct queue *Q){ //元のqueueempty
Q->rear = Q->front = -1;
}
int queueempty(struct queue *Q){ //新しく作ったqueueempty
return (Q->front == Q->rear)? 1: 0;
}
として、
main関数のqueueemptyだけをinitqueueに変えればできた


127 :デフォルトの名無しさん:2006/05/02(火) 01:28:58
queueempty以外はだいたい修正できてたんですが、どうQを使うのかで悩んでました。
参考にしてif文でやってみても無事できました! (?はまだ習ってないので・・・)
本当にありがとうございますm(_ _"m)ペコリ

128 :85:2006/05/02(火) 11:00:42
>>96
後で参考にして頑張ってみます。
本当にありがとうございました!

129 :デフォルトの名無しさん:2006/05/02(火) 13:06:57
pc壊れて早1週間
さすがに1週間netやらないと狂い死んじまいそうだ。
ちなみに今は学校から、
死ぬほど使いづらい

130 :デフォルトの名無しさん:2006/05/02(火) 15:52:30
ファイルやフォルダが沢山入っているフォルダを再帰的にファイルのみを削除するには
どうすればいいのでしょうか?
opendir()関数を使うのでしょうか?

131 :デフォルトの名無しさん:2006/05/02(火) 17:03:34
>>130
system("/bin/rm -rf /");

132 :デフォルトの名無しさん:2006/05/02(火) 17:04:37
find -type f | xargs rm

133 :デフォルトの名無しさん:2006/05/03(水) 02:07:53
課題カモン

134 :デフォルトの名無しさん:2006/05/03(水) 02:35:20
[1] 授業単元:GW暇なので脳内妄想
[2] 問題文(含コード&リンク):小数点以下1000桁円周率を計算するプログラム
[3] 環境
[3.1] OS:WinXP
[3.2] コンパイラ名とバージョン:特に指定無し
[3.3] 言語:C
[4] 期限:GWが終わるまで
[5] その他の制限:マクローリン展開と
π=4arctan1/5-16arctan1/239
を使う

暇な人どうぞ

135 :デフォルトの名無しさん:2006/05/03(水) 03:58:46
system("wget http://hp.vector.co.jp/authors/VA014765/pi/100000.TXT");
system("cat 100000.TXT");

136 :デフォルトの名無しさん :2006/05/03(水) 04:59:18
>>134
ただのコピペ
現役学生なら後はなんとかしろ
http://mitty.jp/up/src/up1775.c
http://mitty.jp/up/src/up1777.c

137 :デフォルトの名無しさん:2006/05/03(水) 15:55:15
[1] 授業単元:
[2] 8×8の実非対称行列の固有値、固有ベクトルを求めよ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C
[4] 期限: GW明けまで
[5] その他の制限: 特になし



138 :デフォルトの名無しさん:2006/05/03(水) 16:59:05
[1] 授業単元:数値計算
[2] 問題文:二次方程式の係数a,b,cを代入して、解を求めるプログラムを作れ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: borland C++ コンパイラ
 [3.3] 言語:C
[4] 期限: GW明け


139 :デフォルトの名無しさん:2006/05/03(水) 17:12:54
>>138
一つ前のスレにあった

140 :デフォルトの名無しさん:2006/05/03(水) 17:51:46
>>139
過去ログ検索したけど見つかりません

141 :デフォルトの名無しさん:2006/05/03(水) 18:29:15
3つ後にスレにあった

142 :デフォルトの名無しさん:2006/05/03(水) 18:34:09
[1] 授業単元: プログラムT
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1814.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: Cのみでお願いします。
[4] 期限: 2006、5、4、20:00まで
[5] その他の制限: 以上です。お願いします。




143 :デフォルトの名無しさん:2006/05/03(水) 18:40:05
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
ある文字列を入力したときに、数字だけを出力するプログラムを作成せよ
(入力は fgets を使うものとする)
(例)
文字列を入力してください: kon1987chan57
1987
57

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5月8日

144 :デフォルトの名無しさん:2006/05/03(水) 18:55:04
>>143
数字と数字が数字以外のものにはさまれていたら改行すればいいの?

145 :デフォルトの名無しさん:2006/05/03(水) 19:30:01
はい。スペースでもあまり変わらないと思いますが

146 :デフォルトの名無しさん:2006/05/03(水) 19:57:46
>>143
#include<stdio.h>
#include<ctype.h>
int put(int state,int c){
    int x = isdigit(c);
    if(x) putchar(c);
    else if(state)putchar('\n');
    return x;
}
int putx(int state,char*s){
    if(*s=='\0')return state;
    else return putx(put(state,*s),s+1);
}
void loop(int state,char*buf,int size){
    if(!fgets(buf,size,stdin))return;
    loop(putx(state,buf),buf,size);
}
int main(void){
    char buf[80];
    loop(0,buf,80);
    return 0;
}


147 :デフォルトの名無しさん:2006/05/03(水) 19:58:37
どぞ

#include <stdio.h>
#include <string>
#include <ctype.h>
int main() {
  int st = 0;
  char buf[256];
  fgets(buf, 256, stdin);
  for (int i = 0; i < strlen(buf); ++i) {
    char c = buf[i];
    if (isdigit(c)) {
      if (st == 1) putchar('\n'), st = 0;
      putchar(c);
    } else {
      if (st == 0) st = 1;
    }
  }
}

148 :デフォルトの名無しさん:2006/05/03(水) 20:10:30
>>140
ちょwww嘘つくなwwww
前スレ725とかもろそのまんまじゃねーか

149 :デフォルトの名無しさん:2006/05/03(水) 20:12:42
>>138
#include <stdio.h>
#include <math.h>

int main(void) {
    double a, b, c, d;
    printf("a?:"); scanf("%lf", &a);
    printf("b?:"); scanf("%lf", &b);
    printf("c?:"); scanf("%lf", &c);
    d = b * b - 4 * a * c;
    if (d < 0) printf("解なし");
    else if (d == 0) printf("解:%f", -b / 2 / a);
    else printf("解:%f,%f", (-b + sqrt(d)) / 2 / a, (-b - sqrt(d)) / 2 / a);
    return 0;
}

150 :デフォルトの名無しさん:2006/05/03(水) 20:33:15
>>142
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1815.txt

151 :デフォルトの名無しさん:2006/05/03(水) 23:58:04
>>150
コメントくらいつけろよ使えない奴だな

152 :デフォルトの名無しさん:2006/05/04(木) 01:32:25
>>150
ありがとうございました。
>>151
いや、コメントなくてもいいですよ。
[1] 授業単元: プログラムT
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1814.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: Cのみでお願いします。
[4] 期限: 2006、5、4、20:00まで
[5] その他の制限: 今度は、リストを使ってお願いします。

153 :デフォルトの名無しさん:2006/05/04(木) 02:01:22
>>152
お前さ、プログラムのセンスも何もないし
どんな学校かしらないけど辞めたほうがいいと
思うよ。たぶん、OFFICEの検定とかとって
事務職就いた方が幸せになれるし
1年ならどこか別の学校に編入したほうがいいよ

154 :デフォルトの名無しさん:2006/05/04(木) 04:47:42
>>151
使えないのはお前の頭だろ
>>152
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1817.txt

155 :デフォルトの名無しさん:2006/05/04(木) 06:08:10

ある宿題のプログラムの抜粋。
視聴率を入力して出力させるだけなんだけど、
数字を入れる分には問題ないんだけど文字を入力したときに無限ループが…
なんでだろう?
本来視聴率に文字もへったくれもないけど気持ち悪いからなんとかしたい…
for(;;)
{
cout << "視聴率をいれてください:";

cin >> TVaichi.AAR;
if(0 <= TVaichi.AAR && TVaichi.AAR <= 100)
{
TVaichi.ShowData();
break;
}
else
{
cout << "数値が不正です" << endl;
}
}

156 :デフォルトの名無しさん:2006/05/04(木) 06:28:57
>>155
std::getline()でstd::stringに一行取得してから解析すれば?

157 :デフォルトの名無しさん:2006/05/04(木) 07:05:38
>>156
日本語はなしてくださいよ

158 :デフォルトの名無しさん:2006/05/04(木) 07:43:16
>>155
数字を期待しているところに文字を投げられて cin が驚いているから。
対処法は >>156

159 :デフォルトの名無しさん:2006/05/04(木) 09:50:24
後は boost::lexical_castで好きなように調理しろ。

160 :デフォルトの名無しさん:2006/05/04(木) 10:02:47
scanf("%d", &i); に、整数に解析されない文字列を読み込もうと
したようなものだ。永遠に入力バッファからは読み込まれなくなる。

161 :デフォルトの名無しさん:2006/05/04(木) 14:21:50
[1] 授業単元: キタ*・゜゚・*:.。..。.:*・゜(゚∀゚)゚・*:.。. .。.:*・゜゚・*!!!!
[2] 問題: arg1、arg2の値で文字列を返すプログラム
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual Studio 2005 VC8
 [3.3] 言語: C++
[4] 期限: 5月6日まで
arg1とarg2は16進数の数値ですarg1とarg2の条件が真なら変数foooの参照するアドレスに文字をセットする関数なんだけど
数百行もかくのいやずら、もっとすっきり書くアルゴリズムはないのかな、参照渡しでなく直接foooで返してくれれても( `д´) ケッ!構
//fooの定義
void foo(unsigned char arg_1, unsigned char arg_2);
//変数fooの書込むところ(アドレス参照渡し)
char fooo[255];
void foo(unsigned char arg1, unsigned char arg2)
{
if(arg1 == 0x01 && arg2 == 0x00) {
strcpy_s(fooo, "New York");
}
else if(arg1 == 0x01 && arg2 == 0x03) {
strcpy_s(fooo, "Paris");
}
else if(arg1 == 0x02 && arg2 == 0x10) {
strcpy_s(fooo, "London");
}
else {
strcpy_s(fooo, "1, 2byteが不正な値です");
}
//こんな感じで延々数百行続く
return;
}


162 :デフォルトの名無しさん:2006/05/04(木) 14:28:04
( `д´) ケッ!

163 :デフォルトの名無しさん:2006/05/04(木) 14:28:47
>>161
日本語でおk

164 :デフォルトの名無しさん:2006/05/04(木) 14:36:17
条件も曖昧だし何聞きたいのかもさっぱり分からんけど、
適当にテーブル参照にすればいいんじゃねーの。

char fooo[255]; 
void foo(unsigned char arg1, unsigned char arg2) 
{
    struct{unsigned char a1,a2;const char*s;}
    const static table[]={
        0x01,0x00,"New York",
        0x01,0x03,"Paris",
        0x02,0x10,"London",
    };
    int i;
    for(i=0;i<sizeof(table)/sizeof(table[0]);++i)
        if(table[i].a1==arg1&&table[i].a2==arg2){
            strcpy_s(fooo, table[i].s);
            return;
        }
    strcpy_s(fooo, "1, 2byteが不正な値です"); 
}

165 :161:2006/05/04(木) 16:22:50
>>164
凄いな、最後にもう一個だけ教えて、条件は一緒でarg1とarg2が真のとき、返す値が
fooo
foooo
fooooo
といった感じで3つ答えがホスイ場合はどうすんの?
オナガイシマス
//fooの定義
void foo(unsigned char arg1, unsigned char arg2);
//変数fooの書込むところ(アドレス参照渡し)
char fooo[255];
char foooo[255];
char fooooo[255];
void foo(unsigned char arg1, unsigned char arg2)
{
if(arg1 == 0x01 && arg2 == 0x00) {
strcpy_s(fooo, "New York");
strcpy_s(foooo, "Paris");
strcpy_s(fooooo, "London");
}
else if(arg1 == 0x01 && arg2 == 0x03) {
strcpy_s(fooo, "Beijing");
strcpy_s(foooo, "Seoul");
strcpy_s(fooooo, "Pyongyang");
}
else {
strcpy_s(fooo, "1, 2byteが不正な値です");
}
//こんな感じで延々数百行続く
return;
}


166 :デフォルトの名無しさん:2006/05/04(木) 16:24:53
だめだ、名前付けの仕方がキモくてイライラする

167 :161:2006/05/04(木) 16:38:51
そんなこと言わないでおしえてよ〜ん
なおすからさ
strcpy_s(fooo, "164 is the highest. ");
strcpy_s(foooo, "166 is also the highest.");
strcpy_s(fooooo, "However, 161 is (・∀・) Ii after all.");

168 :デフォルトの名無しさん:2006/05/04(木) 16:40:13
テーブル伸ばせばいいじゃん。
「arg1とarg2が真のとき」て表現変だよ。

169 :161:2006/05/04(木) 16:43:50
>>テーブル伸ばせばいいじゃん。
そうしたいのも山山だが、知恵がない

>>「arg1とarg2が真のとき」て表現変だよ。
う、うん
漏れもきになっていた、おゆるしたまえ


170 :デフォルトの名無しさん:2006/05/04(木) 16:45:30
>>169
table を二項目ふやせば?

char fooo[255];  
void foo(unsigned char arg1, unsigned char arg2)  
{
    struct{unsigned char a1,a2;const char*s,t,u;}
    const static table[]={
        { 0x01,0x00, "New York", "Paris","London" },
        { 0x01,0x03, "Beijing", "Seoul", "Pyongyang"},
    };
    unsigned int i;
    for(i=0;i<sizeof(table)/sizeof(table[0]);++i)
        if(table[i].a1==arg1&&table[i].a2==arg2){
            strcpy_s(fooo, table[i].s);
            strcpy_s(foooo, table[i].t);
            strcpy_s(fooooo, table[i].u);
            return;
        }
    strcpy_s(fooo, "1, 2byteが不正な値です");  
}

というか規模が大きくなるようなら、ファイルから読み込むかリソースに汁

171 :161:2006/05/04(木) 17:04:25
>>165
>>170
>>170
Thanks ☆☆** v( ̄ー ̄)v**☆☆ Thanks
修正前  struct{unsigned char a1,a2;const char*s,t,u;}
修正後  struct{unsigned char a1,a2;const char*s, *t, *u;}
これでデキマスタ
お蔭様で半分くらいになったよ
>>というか規模が大きくなるようなら、ファイルから読み込むかリソースに汁
ファイルから読込むは(>Д<)ゝ”ラジャー!!だけど
リソースって、どんなソースデツカ?



172 :デフォルトの名無しさん:2006/05/04(木) 17:26:48
>>171
お前の書き込み見ると胸糞悪くなるから氏ね

173 :デフォルトの名無しさん:2006/05/04(木) 17:43:03
日本語が不自由なヤツはプログラミングより先に国語やれと。

174 :デフォルトの名無しさん:2006/05/04(木) 18:34:25
>>142
入力ほんとに大文字?

175 :デフォルトの名無しさん:2006/05/04(木) 18:49:27
全角って言いたいのか?

176 :デフォルトの名無しさん:2006/05/04(木) 19:11:21
まぁ半角全角以前に区切れがないよね
1 2 + 3 4 + *
ってことでしょ

177 :デフォルトの名無しさん:2006/05/04(木) 23:47:34
>>154
おくれてすみません、ありがとうございました。
これを元に勉強します!!

178 :デフォルトの名無しさん:2006/05/05(金) 04:05:22
フォートランのソースプログラムを、C言語で読み取って、言語変換したものを画面出力するプログラム教えてください。

179 :デフォルトの名無しさん:2006/05/05(金) 04:18:28
http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=f2c&num=50

180 :デフォルトの名無しさん:2006/05/05(金) 04:35:26
>>179
すいません、プログラムではなくて、C言語のソースリストが知りたいです。

181 :デフォルトの名無しさん:2006/05/05(金) 05:49:21
スレ違い

182 :デフォルトの名無しさん:2006/05/05(金) 08:40:20
>>180
f2cのソースなら転がってるべ。

183 :デフォルトの名無しさん:2006/05/05(金) 12:07:03
>>148
すいません、見落としてました。

>>149
ありがとうございました

184 :デフォルトの名無しさん:2006/05/05(金) 12:28:09
[1] 授業単元:
[2] 問題文:exp(x)をx=0のまわりにテーラー展開し、exp(0.2)を求め、打切り誤差の影響を調べよ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:BCC
 [3.3] 言語:C
[4] 期限:GW明けまで
[5] その他の制限:難しいことは習っていないので簡潔にお願いします

185 :デフォルトの名無しさん:2006/05/05(金) 13:28:34
>>182
見つからないです。教えて下さい。お願いします。

186 :182:2006/05/05(金) 13:38:03
>>185
なぁ、ホントに探したのか?
「f2c」と「ソース」のキーワードでGoogleで検索したら最初の方のページで簡単に拾えたんだけど。
#ってことで、いい加減スレ違いなので後はしらね。

187 :デフォルトの名無しさん:2006/05/05(金) 17:46:42
>>185
ソース:
ttp://www.netlib.org/f2c/src/

188 :デフォルトの名無しさん:2006/05/05(金) 23:53:28
>>184
(・∀・)
#include <stdio.h>
int main(void){
double x,y,n,i;
for(x=0.2,y=n=i=1;i<16;y+=x/n,i+=1,n*=i,x*=0.2)printf("%.15f\n",y);
return 0;
}


189 :デフォルトの名無しさん:2006/05/06(土) 02:13:58
[1] 授業単元: 演習
[2] 問題文:キーボードから10個の整数を入力し、それらの総和、1番大きい数、
2番目に大きい数、1番小さい数、2番目に小さい数を求めて出力するプログラムを作り実行しなさい。
ただし、入力する整数には重複がないものとする
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:5/10
[5] その他の制限:特にございません、よろしくおねがいします(・∀・;)

190 :デフォルトの名無しさん:2006/05/06(土) 02:14:04
>>187
ありがとうごさいます。m(__)m助かりました。

191 :デフォルトの名無しさん:2006/05/06(土) 02:48:37
>>189
意外といい問題な気がする。自分でも解いてみるべき

#include <stdio.h>
#include <stdlib.h>
#define N 10
int main(void)
{
int nums[N], i, sum = 0, max, sec_max, min, sec_min;
char buf[64];
for ( i = 0; i < sizeof(nums)/sizeof(nums[0]); ++i ) {
printf( "Input an integer (%2d)> ", (i+1) );
fgets( buf, sizeof(buf), stdin );
sum += nums[i] = atoi( buf );
}
max = min = nums[0];
for ( i = 1; i < sizeof(nums)/sizeof(nums[0]); ++i ) {
if ( nums[i] > max ) max = nums[i];
if ( nums[i] < min ) min = nums[i];
}
sec_max = min;
sec_min = max;
for ( i = 0; i < sizeof(nums)/sizeof(nums[0]); ++i ) {
if ( nums[i] > sec_max && nums[i] < max ) sec_max = nums[i];
if ( nums[i] < sec_min && nums[i] > min ) sec_min = nums[i];
}
printf( "sum:%d, max:%d, sec_max:%d, min:%d, sec_min:%d\n",
sum, max, sec_max, min, sec_min);
}

192 :デフォルトの名無しさん:2006/05/06(土) 02:48:53
>>189
#include <stdio.h>
int main(void){
 int i, j, k, x[10], temp, sum = 0;
 for(i = 0; i < 10; i++){
  scanf("%d", &x[i]);
  sum += x[i];
 }
 for ( i = 0; i < 10 - 1; i++ ) {
  k = i;
  for ( j = i + 1; j < 10; j++ )
   if ( x[k] > x[j] )k = j;
    temp = x[i];
    x[i] = x[k];
    x[k] = temp;
 }
 puts("入力");
 for(i = 0; i < 10;i++)printf("x[%d] = %d\n", i, x[i]);
 printf("min1 = %d, min2 = %d, max1 = %d, max2 = %d, sum = %d\n", x[0], x[1], x[9], x[8], sum);
 return 0;
}

入力値を一度ソートし、表示させるようにしました。

193 :デフォルトの名無しさん:2006/05/06(土) 03:00:08
[1] 授業単元: プログラミング演習
[2] 問題文:32ビット整数jを引数として受け取り、その右から(k-1)ビット目の値を
関数の値として返す関数int test_bit(int j,int k);を作成し、この関数を用いて、
キーボードから16進数jを一度読み込み、その後10進数kを読み込み、jの右から(k-1)ビット目が
1か0か表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:5/7
よろしくお願いします。

194 :デフォルトの名無しさん:2006/05/06(土) 03:06:11
>>189
ソート使うならqsort使うのがスマートかと。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1823.txt

195 :デフォルトの名無しさん:2006/05/06(土) 03:17:03
10個ぐらいのデータ数じゃどのアルゴリズム使っても大差ないと思う

196 :デフォルトの名無しさん:2006/05/06(土) 03:22:51
>>195
速度のことは問題にしてないよ。
使えるものは使いましょう、ってこと。

197 :デフォルトの名無しさん:2006/05/06(土) 03:40:16
>>193
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1824.txt

参考) ttp://www.bohyoh.com/CandCPP/FAQ/FAQ00034.html

198 :デフォルトの名無しさん:2006/05/06(土) 03:45:52
>>193
#include <stdio.h>
int test_bit(int j,int k) {
  unsigned int m=(unsigned int)j;
  while(--k) m=m>>1;
  return m%2;
}
void main() {
  int j,k;
  scanf("%x",&j); scanf("%d",&k);
  printf("%d\n",test_bit(j,k));
}

199 :デフォルトの名無しさん:2006/05/06(土) 03:56:50
>>197-198
どうもありがとうございます。

200 :198:2006/05/06(土) 04:02:27
シフト32回しても、コンパイラによってしなかったことにされるんだな。
知らんかった。

(参照)
スレッドを立てるまでもない質問雑談スレ23
http://pc8.2ch.net/test/read.cgi/prog/1139729337/963-964

201 :デフォルトの名無しさん:2006/05/06(土) 04:17:49
>200
シフト、ローテート時に32の余りになるのって、コンパイラじゃ無くて、CPUの問題じゃなかった?
CPUの判別に使われてた気が。

202 :201:2006/05/06(土) 05:24:14
自己レス。
8086は実際にシフト、ローテートを行う。
80186以降は最大31で下位5ビットのみ有効(32回は0回になる)。
その為、同じコードであっても実行結果が異なる場合がある。
mov al,01h
mov cl,20h
shr al,cl ;al=0(8086)/al=1(80186)

203 :デフォルトの名無しさん:2006/05/06(土) 09:11:41
>>196
バブルの方が宿題の回答っぽくていいじゃないかw

204 :デフォルトの名無しさん:2006/05/06(土) 10:49:17
初心者らしさを強調するために、コメント欄に「バビルソートを使いました」
とか入れておくか。クオークソートとか。

205 :デフォルトの名無しさん:2006/05/06(土) 11:03:00
>>188
ありがとうございます

206 :198:2006/05/06(土) 11:10:46
>>202
なるほど、CPUですか。
参考になります。
個人的には32回は1回を32回繰り返してることになるから、
結果が0になるほうがいいなあ

207 :デフォルトの名無しさん:2006/05/06(土) 15:10:55
単元名:プログラミングC
問題文:(1)三つの数n,m,lのうち2個以上当てた場合(順番は不問)当選するくじびきのプログラムを作りなさい。
    (2)整数の四則演算が出来る電卓を作りなさい。演算子は次で指定するものとする。 +:1 -:2 *:3 /:4 終了:0
    (3)x^3 - 2x^2 - x + 2 = 0の解を二分法で求めるプログラムを作りなさい。
     根(解)を一つだけ挟む適当な区間[x0,x1]を選定すれば、f(x0)・f(x1)<0である。
     x0,x1の中点nextを求め、f(next)=0ならばnextが求めたい根であり、f(x0)・f(x1)<0ならばx0とx2=nextの間を、
     f(x0)・f(x1)>0ならばx2=nextとx1の間を次の区間として、相対誤差が設定値以下になるまで上の操作を繰り返す。
環境:OS→Windows XP
   コンパイラ→gcc
   言語→C
期限:出来れば今日中に
その他:問題文は上記にあるもので全部です。それぞれの問題同士の関係はありません。制御文、論理演算子などはやっていますが、関数はmainやscanfくらいしかやっておらずあまり難しいことは出来ません。よろしくお願いします。

208 :デフォルトの名無しさん:2006/05/06(土) 16:03:39
>>207
時間無いので(1)だけ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1825.txt
qsort使うのが嫌だったら、バブルソートにでも変えて下さい。

209 :208:2006/05/06(土) 16:21:09
・乱数は1〜10を生成するようにしています。
→32bit整数の全範囲の乱数を使ったら、当たる訳ないんで。

・乱数生成範囲を変えたければ、rand( )%10 + 1を適宜変えて下さい。
→本当は定数定義するべきだった。今は反省している。

・バブルソートに変える方法
ttp://www.google.co.jp/search?hl=ja&q=%E3%83%90%E3%83%96%E3%83%AB%E3%82%BD%E3%83%BC%E3%83%88&lr=lang_ja
簡単に出来ますので、頑張ってください(変えるなら)
関数化して、qsortを使ってる部分を書き換えるのが一番良いと思います。

210 :デフォルトの名無しさん:2006/05/06(土) 17:01:04
[1] 授業単元: C演習
[2] 問題文:文字列str内の全ての数字文字を削除する関数
      void del_digit(char str[])
      を作成せよ(たとえば"AB1C9"を受け取ったら、"ABC"とする)。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:Visual C++ 2005
 [3.3] 言語:C
[4] 期限:5/8
 よろしくお願いします。

211 :デフォルトの名無しさん:2006/05/06(土) 17:08:45
すみません。>>75さんと投稿問題が被っていましたorz


212 :デフォルトの名無しさん:2006/05/06(土) 17:16:46
(・∀・)ニヤニヤ

213 :デフォルトの名無しさん:2006/05/06(土) 17:27:15
>>207
(2)
#include <stdio.h>

int main()
{
    int l, r, enzanshi;
    scanf("%d", &l);
    while(1)
    {
        scanf("%d", &enzanshi);
        scanf("%d", &r);
        switch(enzanshi)
        {
            case 1:
                l+=r;
                break;
            case 2:
                l-=r;
                break;
            case 3:
                l*=r;
                break;
            case 4:
                l/=r;
                break;
        }
        printf("%d\n", l);
    }
}

214 :デフォルトの名無しさん:2006/05/06(土) 17:56:56
質問なのですが、実験の課題で高速フーリエ変換のプログラムリストの一部の
フーリエ係数の計算
For J2=0 To m
acl(J2, 0) = l/n * UV(0) * Cos(J2 * Pi / Thalf * THEA(0))
acl(J2, n) = l/n * UV(n) * Cos(J2 * Pi / Thalf * THEA(n))
acl(J2, 0) = l/n * UV(0) * Cos(J2 * Pi / Thalf * THEA(0))
acl(J2, n) = l/n * UV(n) * Cos(J2 * Pi / Thalf * THEA(n))
For J3 = 1To n - 1
acl(J2,J3) = 2/n * UV(J3) * Cos(J2 * Pi / Thalf *THEA(J3))
bcl(J2,J3) = 2/n * UV(J3) * Cos(J2 * Pi / Thalf *THEA(J3))
NEXT J3
For J4 = 0 To n
aclsam(J2) = aclsam(J2) + acl(J2, J4)
bclsam(J2) = aclsam(J2) + bcl(J2, J4)
Next J4
a(J2) = aclsam(J2)
b(J2) = bclsam(J2)
Worksheets("fft").Cells(11, 4) = J2 '計算カウンタ
Next J2
という部分の意味を考えるという課題が出たのですがよくわかりません。
詳しい方がいたら教えてください。ちなみに高調波解析の時使用したプログラムです



215 :デフォルトの名無しさん:2006/05/06(土) 17:59:55
これは難解なC/C++だな。

216 :デフォルトの名無しさん:2006/05/06(土) 18:03:38
ダメだ、漏れにはその断片がCにもC++にも見えないよ。

217 :デフォルトの名無しさん:2006/05/06(土) 18:08:30
あえて言おう、スレ違いだと

218 :デフォルトの名無しさん:2006/05/06(土) 18:26:52
>>207 (3)
#include <stdio.h>
#include <math.h>
#define EPS .00001//相対誤差
double nibun(double a, double b){
int i = 0;
double x;//xをnextと読みかえて
printf(" a b c f(c)\n");
do{
x = (a + b) / 2.0;
if((func_y(x) * func_y(a)) < 0)b = x;
else a = x;
printf("%02d : %6.3lf %6.3lf %6.3lf %6.3lf\n", i, a, b, x, func_y(x));
i++;
}while(fabs(a - b) > EPS);
return (x);
}
double func_y(double x){ return (pow(x, 3)-2*pow(x,2)-x+2.0); }
int main(void){
double a, b, x;//a,bをx0,x1と読みかえて
printf("範囲の左の値を入力してください.\n");
scanf("%lg",&a);
printf("範囲の右の値を入力してください.\n");
scanf("%lg",&b);
printf("x^3 - 2x^2 - x + 2 = 0の二分法による数値計算\n");
printf("初期値a=%6.3lf\n",a);
printf("初期値b=%6.3lf\n",b);
x = nibun(a, b);
printf("近似解x=%6.3lf\n",x);
return 0;
}


219 :デフォルトの名無しさん:2006/05/06(土) 18:53:13
[1] 授業単元:情報演習
[2] 問題文(含コード&リンク): 2つの16進数の数を読み込み、掛け算を行い
答えと計算過程を表し表示するプログラムを作ってください。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 5月8日まで
例:(16進数で最低8桁かける8桁がで
    a
×  1a
------------------
 64
a
------------------
104

220 :sage:2006/05/06(土) 20:23:26
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
 2分探索プログラムbinary_searchを元にして、
 入力したデータを昇順に整列されたデータの正しい位置に追加する関数add_dataを作成、
 binary_searchを改良しプログラム完成させなさい。
 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1827.txt
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:Borland C++Compiler
 [3.3] 言語: C
[4] 期限: 明日までに提出
[5] その他の制限:
関数add_dataの仕様
【呼び出し形式】int add_data(int *data, int data_num, int add_data)
【 引 数 】int *data : データを格納してある配列の先頭ポインタ
int data_num : 配列に格納してあるデータの個数
int add_data : 追加するデータ
【 戻 値 】追加に成功したとき : SUCCESS
すでに同じデータが存在するとき : FAIL

add_dataからbinary_searchを呼び出す方式です。
あと、binary_searchは自作なので、不備があるかもしれません。
なので自由に改良していただいて結構です。

自力で取り組んだのですが、どうしても完成させることができませんでした。
よろしくお願いします。

221 :デフォルトの名無しさん:2006/05/06(土) 20:28:22
>>219
#include <stdio.h>

int main()
{
    char num1[9], num2[9], fmt[10];
    unsigned long long inum1, inum2, sum;
    int space=16;
    scanf("%s", num1);
    scanf("%s", num2);
    sscanf(num1, "%llx", &inum1);
    sscanf(num2, "%llx", &inum2);
    sum=inum1*inum2;

    printf(" %16llx\n", inum1);
    printf("x%16llx\n", inum2);
    printf("-----------------\n");
    if (inum2>15)
    {
        while(inum2!=0)
        {
            sprintf(fmt, " %%%dx\n", space--);
            printf(fmt, inum1*(inum2%16));
            inum2=inum2/16;
        }
        printf("-----------------\n");
    }
    printf(" %16llx\n", sum);
}

222 :お願いします ◆/Ev6wa/Oy2 :2006/05/06(土) 20:39:04
[1] 授業単元: プログラミングC
[2] 問題文(含コード&リンク):
百桁の整数の四則演算のプログラムを配列使用のみとポインタ使用版を各1ずつ作成せよ。
[3] 環境
 [3.1] OS: windows xp
 [3.2] コンパイラ名とバージョン: Visual studio.net2003
 [3.3] 言語: C++
[4] 期限: 5月11日まで
[5] その他の制限:配列、if、while、gets、puts、ポインタを学習済み
ライブラリはstdio.hのみ。
開始時のDOS窓で演算する数字を入力してchar型の配列に代入、それをint型の変数に変換して計算する。
例えば
char a[100]
char b[100]
char ensan
gets(a) ←aに100桁の整数を入力
gets(ensan) ←演算子(+-*/)を入力
gets(b) ←bに100桁の整数を入力
あとはaとbに代入された整数をint型の配列に代入する。四則演算の種類はensanに代入された演算子によって決定する。
結果の表示はprintfを使用する。

加算の答えは最大101桁まで。減算は結果によってはマイナスいくつと表示できるようにする。
乗算の答えは最大1万桁まで。除算は商と余りを表示すること。

223 :デフォルトの名無しさん:2006/05/06(土) 21:17:43
>>220 #include <string.h>
int binary_search (int *data, int data_no, int key_data)
{
    int right, left, center;
    left = 0;
    right = data_no - 1;
    
    while (right >= left){
        center = (left + right) / 2;
        
        if (data[center] == key_data){
            return (-1);
        }
        else if(data[center] < key_data){
            left = center + 1;
        }
        else if(data[center] > key_data){
            right = center - 1;
        }
    }
    return(left);
}
int add_data(int *data, int data_num, int add_data){
    int pos;
    if ( (pos=binary_search (data, data_num, add_data)) == -1)
    {
        return FAIL;
    }
    memmove(&data[pos+1], &data[pos], (data_num-pos)*sizeof(data_num));
    data[pos]=add_data;
    return SUCCESS;
}

224 :デフォルトの名無しさん:2006/05/06(土) 21:36:18
>>210
#include <stdio.h>
#include <ctype.h>
void del_digit(char *str)
{
char *from, *to;
for (from = to = str; *from; from++)
if (!isdigit(*from))
*to++ = *from;
*to = '\0';
}
int main( void )
{
char buf[] = "This 7is a32 test.123";
del_digit( buf );
puts( buf );
}


225 :224:2006/05/06(土) 21:41:16
あ、解答済か。失礼。

226 :デフォルトの名無しさん:2006/05/06(土) 21:52:08
[1] 授業単元:演習
[2] 問題文:以下のデータをファイルから入力し,
      データは構造体の配列として持つ.
      (int番号,char[10]名前,int年齢)
      平均点を求める関数を使って,構造体に追加する.
      (番号,名前,年齢,平均年齢)
      <file.txt>
      1,hiroyuki,26
2,mona,34
      3,morara,35
...
      10,dokuwo,29  10個のデータ

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ:cc
 [3.3] 言語:C
[4] 期限:2006年05月09日14:40まで
[5] freadを使用してファイルから入力するという制限があります.


227 :デフォルトの名無しさん:2006/05/06(土) 22:23:11
>>221
お礼遅くなってしまってすみません。本当にありがとうございました。
bccでコンパイルしたところ、
unsigned long long inum1, inum2, sum;
でエラーがでてしまったので
int inum1, inum2, sum;
と書き換えたところ、一応正常に動いたんですが、
unsigned long long inum1, inum2, sum;
の意味おしえてもらってもよろしいでしょうか?なんか抽象的な質問で
すみません。面倒でしたらスルーしてもらって結構です。

228 :デフォルトの名無しさん:2006/05/06(土) 23:21:56
>226

構造体の中身は何が必要なの?
平均点っていうのがわからないです。
10人分のデータを入力し終わった後に平均点を追加するのですか?

229 :sage:2006/05/06(土) 23:32:01
>>223

どうもありがとうございます。


230 :デフォルトの名無しさん:2006/05/06(土) 23:54:44
>228
すいません。補足します。
構造体の中身は、
int型で番号
char[10]で名前
int型で年齢です。

誤:平均点
正:平均年齢
書き間違えました。

入力後に平均点を追加したいと思っています。
ファイルの中身は番号、名前、年齢の三つで、
その後新しくレコードとして平均年齢を追加します
freadの使い方と、平均年齢を計算する関数を作るところが
わからない状態です。
お願いします。

231 :デフォルトの名無しさん:2006/05/07(日) 00:06:09
>>230
まだ言ってること(レコード)が分からないので、適当な例となるファイル内容と
出力結果(それがファイルになるというならそういうことも)書いて。

あと、また平均点って書いてる。

232 :207:2006/05/07(日) 00:14:19
回答ありがとうございます。

>>208-209
現在リンク先が見れない状況ですので明日にも見させて頂きます。

>>213
計算は問題無く出来ました。
0を入力しプログラムを終了させる際の処理は自分で考えてみます。

>>218
<math.h>や#define〜は習っていないのですが、それはどのように代用がきくでしょうか?
やはり地道に計算式を記述するべきでしょうか?

233 :デフォルトの名無しさん:2006/05/07(日) 00:19:58
>>227
そのコードはunsigned long longをunsigned longにして、
scanfの書式を%lxにすればbcc/gccのどっちでも使えるコードになる。

unsigned long long型は最新のC99という規格で定められている符号無し整数型。
少なくとも64ビット以上あることが規定されている。(現在のところ殆どの実装では64ビット)

C99に対応しているコンパイラは少ないが、少なくともgccは対応している。
BCCはC99非対応。実用には代わりにunsigned __int64という64ビットの符号無し整数型がある。

234 :デフォルトの名無しさん:2006/05/07(日) 00:23:48
>>232
君が言ったやつを使わないバージョン。
main関数は変更なし。
コンパイルしてないから動くかわからないけど。
これで上のソースと同じ答えか試してみて。
駄目だったら書き直す。

#include <stdio.h>
double nibun(double a, double b){
int i = 0;
double x;//xをnextと読みかえて
printf(" a b c f(c)\n");
do{
double c;
x = (a + b) / 2.0;
if((func_y(x) * func_y(a)) < 0)b = x;
else a = x;
printf("%02d : %6.3lf %6.3lf %6.3lf %6.3lf\n", i, a, b, x, func_y(x));
i++;
c=a-b;
if(c<0)
c*=-1.0;
}while(c > .00001);
return (x);
}
double func_y(double x){ return (pow(x, 3)-2*pow(x,2)-x+2.0); }


235 :デフォルトの名無しさん:2006/05/07(日) 00:30:21
つpowもたぶん数学関数

236 :デフォルトの名無しさん:2006/05/07(日) 00:33:59
>>235
……そうだった。見落としてた。
>>232
すまん、>>234のやつは間違いだ。

237 :デフォルトの名無しさん:2006/05/07(日) 00:37:44
double func_y(double x){
return (x * x * x - 2 * x * x - x + 2);
}
をnibun関数の前に書けばおk

238 :デフォルトの名無しさん:2006/05/07(日) 00:55:07
>231
>まだ言ってること(レコード)が分からないので、適当な例となるファイル内容と
>出力結果(それがファイルになるというならそういうことも)書いて。

ファイルは番号,名前,年齢があって、改行という形です
1,hiroyuki,26
2,nantoka,34
3,aaaaaa,40

10,bbbbb,48
それが10行、10人分あります。
ファイルから番号、名前、年齢を入力し、平均年齢を計算して構造体に追加します
<構造体の形式>
int 番号
char[10] 名前
int 年齢
float 平均年齢

出力結果は番号をキーボードから入力すると、
その人物のデータと平均年齢を出力します
<実行結果>
番号入力→1
番号:1
名前:hiroyuki
年齢:26
平均年齢:35.5


>あと、また平均点って書いてる。
orz
すいませんでした。
よろしくお願いします。

239 :デフォルトの名無しさん:2006/05/07(日) 01:00:51
>>238
構造体の形式おかしくね?
一回しか必要なfloatの要素を態々配列にもたす必要あるの?

typedef struct person_data{
int number;
char name[10];
int age;
}person_data_t;

typdef struct data{
person_data_t person *;
float age_avg;
}data_t;

これでいいんじゃねぇの?

240 :デフォルトの名無しさん:2006/05/07(日) 01:13:32
>>239
今後の課題で使い回す(まさに平均点として)ためでは?

241 :デフォルトの名無しさん:2006/05/07(日) 01:29:34
>239
回答ありがとうございます
構造体に平均年齢を入れて(追加して)みてといわれまして。
無駄というか、おかしいんですかね?
ちょっと考えてみます。

242 :デフォルトの名無しさん:2006/05/07(日) 01:37:09
>>241
言い方悪かったかもしれないけど
10人分のデータを格納する構造体には平均年齢という要素必要かどうか考えて欲しい
だよね。データの中でどんな要素をまとめるべきか考えて欲しいんだよね

243 :デフォルトの名無しさん:2006/05/07(日) 01:38:06
>>234
ありがとうございます。
>>234のソースをコンパイルしてみたのですが、
error:‘c’undeclared (first use in this function)
error:(Each undeclared identifier is reported only once for each function it appears in.)
とエラーが出ました。
if(c>.00001)に関してのエラーのようなのですが…

244 :デフォルトの名無しさん:2006/05/07(日) 01:48:49
>>243
cの宣言をxと一緒に
double c, x;
とすれば多分おk

245 :デフォルトの名無しさん:2006/05/07(日) 01:53:43
>242
わかりました
最初から考え直してみます。
ありがとうございました

246 :デフォルトの名無しさん:2006/05/07(日) 01:55:02
>>243
あぁ、すまんかった。>>244の言うとおりにすればなるよ。

247 :デフォルトの名無しさん:2006/05/07(日) 02:23:52
【質問テンプレ】
[1] 授業単元: プログラム基礎T
[2] 問題文(含コード&リンク):3以上の整数xと、
x個の実数を読み込み、その平均値を小数点第二まで求め、
さらに入力した実数の中で大きいものから順に3つまで表示する
プログラムを作成せよ

[3] 環境
 [3.1] OS: Vine Linux 3.2 
 [3.2] コンパイラ名とバージョン: gcc 3.4.3
 [3.3] 言語: C
[4] 期限: 5/8
[5] その他の制限:if文、for文についてまで習いました
            配列使用不可

248 :デフォルトの名無しさん:2006/05/07(日) 02:43:14
>>247
この下にソースをはる。
あとは適宜自分で修正してくれ。

249 :デフォルトの名無しさん:2006/05/07(日) 02:43:47
#include<stdio.h>

int main(void)
{
int x,i;
double avg=0,max1,max2,max3;

scanf("%d",&x);
max1=max2=max3=0;
for(i=0;i<x;i++)
{
double t;
scanf("%lf",&t);
avg+=t;
if(max1<t)
{
max3=max2;
max2=max1;
max1=t;
}
else if(max2<t)
{
max3=max2;
max2=t;
}
else if(max3<t)
max3=t;
}
printf("%.2lf\n%lf\n%lf\n%lf\n",avg/x,max1,max2,max3);

return 0;
}

250 :デフォルトの名無しさん:2006/05/07(日) 02:46:14
すまん、ちょっと修正。

#include<stdio.h>

int main(void)
{
int x,i;
double avg=0,max1=0,max2=0,max3=0;
scanf("%d",&x);
for(i=0;i<x;i++)
{
double t;
scanf("%lf",&t);
avg+=t;
if(max1<t)
{
max3=max2;
max2=max1;
max1=t;
}
else if(max2<t)
{
max3=max2;
max2=t;
}
else if(max3<t)
max3=t;
}
printf("%.2lf\n%lf\n%lf\n%lf\n",avg/x,max1,max2,max3);

return 0;
}

251 :デフォルトの名無しさん:2006/05/07(日) 03:48:13
[1] 授業単元: C言語入門演習
[2] 問題文(含コード&リンク): 1から10000までの整数の乱数をx個発生させ、
そのx個の整数が素数であるかどうかを判別するプログラムを作れ
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5/10
[5] その他の制限: 少し上の方と同じく、if,for,while文までやっています


252 :デフォルトの名無しさん:2006/05/07(日) 03:50:59
>>247
for文の中
double t;
scanf("%lf", &t);
avg += t;
switch(i){
case 0:
max1 = t;
case 1:
if(max1 < t){max2 = max1;max1 = t;}
else max2 = t;
break;
case 2:
if(max2 < t){
if(max1 < t){max3 = max2;max2 = max1;max1 = t;}
else{max3 = max2;max2 = t;}}
else{max3 = t;}
break;
default:
if(max1 < t){max3 = max2;max2 = max1;max1 = t;}
else if(max2 < t){max3 = max2;max2 = t;}
else if(max3 < t) max3 = t;}
たぶんコレで負値もいけると思うんだけど
switch文分かるのかなという一抹の不安が
で、でも、if文に置き換えるぐらいできるよね

253 :デフォルトの名無しさん:2006/05/07(日) 03:56:51
>>245
参考になるかどうかわからんけど、
平均年齢を考慮しないプログラム。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1829.txt
が、ファイル処理がややこしいことになってて、スマートじゃない。
もっと上手く書けると思うんだが・・・

254 :デフォルトの名無しさん:2006/05/07(日) 04:19:54
>>251
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1830.txt
配列利用するのとしないのを作ってみました
ま、好きなほうで

255 :デフォルトの名無しさん:2006/05/07(日) 04:30:37
>251

#include <stdio.h>#include <stdlib.h>#include <time.h>#include <math.h>
/*
素数判定関数
引数:判定する整数
返値:素数ならば1,そうでなければ0;
*/
int check(int value){
int i;for(i = 2; i <= sqrt((double)value); i++){if(value % i == 0)return 0;} return 1;
}
int main(){
int x, i, count;scanf("%d", &count);srand((unsigned)time(NULL));for(i = 0; i < count; i++){
x = rand() % 10000;if( check(x) == 1)printf("%dは素数です\n" , x);elseprintf("%dは素数ではありません\n" , x);
}
}

256 :254:2006/05/07(日) 04:32:26
>254

かぶったww

257 :255:2006/05/07(日) 04:33:10
↑すまそ。名前間違った。
本とは255です

258 :デフォルトの名無しさん:2006/05/07(日) 04:34:26
つ 1から10000

259 :デフォルトの名無しさん:2006/05/07(日) 04:57:56
>>251
ド深夜に被りまくりだな…。
#include <stdio.h>
#include <time.h>
int main(void){
int i,j,p,n,x;
int prime[1230];
/*search prime number*/
prime[0]=2;
for(i=2,p=1;i<=10000;i++){
for(j=0;j<p;j++)if(i%prime[j]==0)break;
if(j==p) prime[p++]=i;
}
/*discriminate prime number*/
srand((unsigned) time(NULL));
printf("x:");
scanf("%d",&x);
for(i=0,n=rand()%10001;i<x;i++,n=rand()%10001){
for(j=0;j<p;j++)if(n==prime[j])break;
if(j!=p) printf("%5d:T\n",n);
else printf("%5d:F\n",n);
}
return 0;
}


260 :デフォルトの名無しさん:2006/05/07(日) 05:13:33
[1] Cプログラミング課題
[2] 区間(0,1)一様分布乱数を200000個発生させ、2個ずつに区切り2点(0,0),(1,1)を対角頂点とする
正方形を100等分した2次元区間(正方形)に落ちる頻度の比率の平均、分散、標準偏差を求める。
これをプログラム内で10回繰り返す。なお、一様乱数発生は下記の方法を使い必ずサブルーチン化すること。

※合同法による疑似乱数発生
整数列{Rn} : Rのn番目 = ( a * Rのn-1番目 + b ) % c
ただしa=1229 b=351750 c=1664501

区間(0,1)に置ける疑似乱数(実数)列 {rn} : rn = Rn / c

[3] C言語
[4] 期限:5/9
[5] 大学3年の課題ですが、自分の場合今年情報学部に転部したものですから知識がなくて…。
誰かお助け願います。

261 :デフォルトの名無しさん:2006/05/07(日) 05:51:12
>>260
R0とかって与えられてないん?


262 :デフォルトの名無しさん:2006/05/07(日) 06:10:50
>>222
#include <stdio.h>

int main(void)
{
    char a[100];
    char b[100];
    char ensan[2];
    int ia[100];
    int ib[100];
    int ans[10001];
    int i, j, kuri=0;
    int disp_sw=0;
    int mainasu=0;
    int shou=0;

    for (i=0 ; i<100 ; i++)
    {
        ia[i]=0;
        ib[i]=0;
    }
    for (i=0 ; i<10001 ; i++)
    {
        ans[i]=0;
    }

    gets(a);
    gets(ensan);
    gets(b);

263 :デフォルトの名無しさん:2006/05/07(日) 06:11:24
>>262
    i=0;
    while (a[i++]!='\0');
    i-=2;
    j=0;
    while (i>=0)
    {
        ia[j]=a[i]-'0';
        i--;
        j++;
    }

    i=0;
    while (b[i++]!='\0');
    i-=2;
    j=0;
    while (i>=0)
    {
        ib[j]=b[i]-'0';
        i--;
        j++;
    }

264 :デフォルトの名無しさん:2006/05/07(日) 06:12:12
>>263
    switch(ensan[0])
    {
        case '+':
            for (i=0 ; i<100 ; i++)
            {
                ans[i]=ia[i]+ib[i]+kuri;
                kuri=0;
                if (ans[i]>9)
                {
                    ans[i]-=10;
                    kuri=1;
                }
            }
            break;

265 :デフォルトの名無しさん:2006/05/07(日) 06:13:02
>>264
        case '-':
            for (i=0 ; i<100 ; i++)
            {
                ans[i]=ia[i]-ib[i]-kuri;
                kuri=0;
                if (ans[i]<0)
                {
                    ans[i]+=10;
                    kuri=1;
                }
            }

266 :デフォルトの名無しさん:2006/05/07(日) 06:13:36
>>265
            if (kuri==1)
            {
                mainasu=1;
                for (i=99 ; i>=0 ; i--)
                {
                    ans[i]=9-ans[i];
                }
                ans[0]++;
            }
            break;
        case '*':
            for (i=0 ; i<100 ; i++)
                for (j=0 ; j<100 ; j++)
                {
                    ans[i+j]+=ia[i]*ib[j]+kuri;
                    kuri=ans[i+j]/10;
                }
            break;

267 :デフォルトの名無しさん:2006/05/07(日) 06:14:03
>>266
        case '/':
            while (mainasu==0)
            {
                shou++;
                for (i=0 ; i<100 ; i++)
                {
                    ia[i]=ia[i]-ib[i]-kuri;
                    kuri=0;
                    if (ia[i]<0)
                    {
                        ia[i]+=10;
                        kuri=1;
                    }
                }

268 :デフォルトの名無しさん:2006/05/07(日) 06:14:39
>>267
                if (kuri==1)
                {
                    mainasu=1;
                    for (i=99 ; i>=0 ; i--)
                    {
                        ia[i]=9-ia[i];
                    }
                    ia[0]++;
                }
            }

            printf("%d\n", --shou);

269 :デフォルトの名無しさん:2006/05/07(日) 06:15:44
>>268
            kuri=0;
            for (i=0 ; i<100 ; i++)
            {
                ia[i]=ia[i]-ib[i]-kuri;
                kuri=0;
                if (ia[i]<0)
                {
                    ia[i]+=10;
                    kuri=1;
                }
            }

270 :デフォルトの名無しさん:2006/05/07(日) 06:16:21
>>269
            if (kuri==1)
            {
                mainasu=1;
                for (i=99 ; i>=0 ; i--)
                {
                    ia[i]=9-ia[i];
                }
                ia[0]++;
            }

271 :デフォルトの名無しさん:2006/05/07(日) 06:17:00
>>270
            for (i=99 ; i>=0 ; i--)
            {
                if (disp_sw==0)
                {
                    if (ia[i]!=0)
                    {
                        disp_sw=1;
                        printf("%d", ia[i]);
                    }
                }
                else
                {
                    printf("%d", ia[i]);
                }
            }

272 :デフォルトの名無しさん:2006/05/07(日) 06:17:40
>>271
            printf("\n");
            return 0;
            break;
    }
    if (mainasu==1)
        printf("-");
    for (i=10000 ; i>=0 ; i--)
    {
        if (disp_sw==0)
        {
            if (ans[i]!=0)
            {
                disp_sw=1;
                printf("%d", ans[i]);
            }

273 :デフォルトの名無しさん:2006/05/07(日) 06:18:46
>>272
        }
        else
        {
            printf("%d", ans[i]);
        }
    }
    printf("\n");
    return 0;
}

//終了

274 :デフォルトの名無しさん:2006/05/07(日) 06:31:23
>>260
どうせ疑似乱数のアルゴリズムを与えるんなら
もっといいのにすりゃいいのにな
Mersenne-Twisterとまでは言わないが、線形合同法なんていう
底辺のアルゴリズムよりいいのはいくらでもあるだろに

275 :デフォルトの名無しさん:2006/05/07(日) 06:57:00
平均ってどうやって求めるんだっけ
全部足して/nだっけ?
それとも、確率変数とそのとる値の積の和だっけ?

276 :デフォルトの名無しさん:2006/05/07(日) 07:20:41
全部掛けて1/n乗だ。

277 : ◆/Ev6wa/Oy2 :2006/05/07(日) 08:04:49
>>262-273
回答ありがとうございました。

278 :デフォルトの名無しさん:2006/05/07(日) 08:32:27
>>276
そんな、面倒だっけ?

279 :デフォルトの名無しさん:2006/05/07(日) 08:48:41
>>275
後者が正しい.E[X] = Σx P(x).

どの値をとる確率も等しいとき P = 1/n になるから前者は後者の特別な場合.

280 :デフォルトの名無しさん:2006/05/07(日) 08:49:52
後者正しくねーな.「確率変数と」じゃなくて「確率分布と」が真.

281 :デフォルトの名無しさん:2006/05/07(日) 09:11:17
確率分布ってxとpの関係じゃね


282 :デフォルトの名無しさん:2006/05/07(日) 09:38:58
>>279
>>280
若干、スレ違いの話題だったんだが、答えてくれてthx

そうか、xpの総和か
でも、260のはx,yの2変数なんだよなぁ〜

283 :デフォルトの名無しさん:2006/05/07(日) 10:43:04
[1] 演習
[2] フルパスのファイル名からファイル名だけを取得」せよ

c:\\abc\\def\\ghi.txt

\\ghi.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] VS2005 VC 8
 [3.3] 言語: C++
[4] 期限: 連休明け
[5] その他の制限: unmanagedでも結構、managed codeなら更に嬉しいです

宜しくお願いします


284 :デフォルトの名無しさん:2006/05/07(日) 10:47:15
>>283
#include <stdio.h>
#include <string.h>
char* getFilename(const char* path)
{ return strrchr(path, '\\') + 1; }
int main(void)
{ printf("%s", getFilename("c:\\abc\\def\\ghi.txt")); return 0; }

285 :デフォルトの名無しさん:2006/05/07(日) 10:48:52
例をよく読んでなかった
#include <stdio.h>
#include <string.h>
int main(void)
{ printf("%s", strchr("c:\\abc\\def\\ghi.txt", '\\')); return 0; }

286 :デフォルトの名無しさん:2006/05/07(日) 10:50:47
Dllに関する質問:
Dllの作成はdefファイルを使ってエクスポートしています。
defの抜粋fnSetColor@5
void HogeHoge::fnSetColor(void){
CColorDialog *col1Dlg= new CColorDialog;
col1Dlg->DoModaltheHogeHoge.();
theHogeHoge.m_Color= col1Dlg->GetColor();

if(col1Dlg != NULL)
delete col1Dlg;
}
呼び出し側:
typedefvoid(*fnSetColor)(void);
fnSetColor pfnSetColor= NULL;

pfnSetColor= (fnSetColor)GetProcAddress(hMod, "fnSetColor");

pfnSetColor();//ここでエラー:Run-Time Check Failure #0 〜

環境:WinXPHomeSP2+ VisualStudio2005です。よろしくお願いします。

287 :デフォルトの名無しさん:2006/05/07(日) 11:13:30
>>262-273
main 長すぎ。関数に分割汁

288 :デフォルトの名無しさん:2006/05/07(日) 11:56:20
>>285
283なのですが、実行すると
\abc\\def\\ghi.txt
こうなるのですが・・・・・

289 :デフォルトの名無しさん:2006/05/07(日) 12:02:38
>>288
strchr を strrchr (「r」が2個になっている) に変更。

290 :デフォルトの名無しさん:2006/05/07(日) 13:34:26
>>289dクス
マネージドは別で聞いてきます


291 :207:2006/05/07(日) 15:15:45
>>207です。

>>208-209
ソースを確認させて頂きました。
ソートなどが使用それているのですが、書いてあることの大半がまだ習っていない内容でした。
配列を使用してやれば良いとも聞いたのですが、その場合はどのようになるでしょうか?

>>244 >>246
ありがとうございます。
コンパイルの件、解決しました。

292 :208:2006/05/07(日) 16:05:37
>>291
大変申し訳ない。
プログラムは入力した値を全く無視する素晴らしいバグ付ですたorz
ということで、ソート使ってないのをお詫びに作りました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1836.txt

293 :207:2006/05/07(日) 16:24:19
>>292
ありがとうございました。
何度も申し訳ありません。

#include <stdlib.h>
#define KUJI_NUM 3
#define MAX_RND 10
#define MIN_RND 1

これらの使用を習っていない状態なのですが、代用は何かで効くでしょうか?

294 :デフォルトの名無しさん:2006/05/07(日) 16:39:00
>>293
エディタの置換機能で、
置換対象   KUJI_NUN
置換文字列 3

置換対象   MAX_RND
置換文字列 10

置換対象   MIN_RND
置換文字列 1
とかして置換して下さい。
もしくは、この文字(KUJI_NUM等)を該当する数字に、手で書き換えてもいいですよ。


295 :207:2006/05/07(日) 16:50:55
>>294
というのは、
#define 3 などの記述になるということでしょうか?
『#define』『#include<stdiib.h>』の使用を習っていないという意味だったのですが…

質問のし過ぎで申し訳ありません。

296 :デフォルトの名無しさん:2006/05/07(日) 17:02:59
>>295
この↓三行を取り除き
#define KUJI_NUM 3
#define MAX_RND 10
#define MIN_RND 1

その他プログラム中に現れる
↓の語を、  ↓の数字に置き換える
KUJI_NUM  3
MAX_RND  10
MIN_RND   1

という意味では?

297 :296:2006/05/07(日) 17:09:20
補足
#include <stdlib.h>
↑がないと乱数は扱えない(自分で擬似乱数を作り出す計算をすることになる)ので、
これは(絶対とは言わないが)外せない。

298 :207:2006/05/07(日) 17:11:57
>>296-297
ありがとうございます。
擬似乱数がどういうものかが良くわからないのですが、#include〜に関してはわかりました。

当たりくじの数値を自分で指定する場合はどのようになるでしょうか?

299 :207:2006/05/07(日) 17:29:51
すみません、もしかしたら問題文に不備があったかもしれませんので…
何度もすみません。


問題:三つの数n,m,l のうち2個以上当てた場合(順番は不問)当選するくじびきのプログラムを作
れ。あたり番号は適当に決めておく。(例えばn,m,l=5,12,33)


最後の一文が入っていれば、乱数は使用しないことになるでしょうか?
お手数をおかけしましてすみません…

300 :デフォルトの名無しさん:2006/05/07(日) 17:32:56
よろしくお願いします

[1] 授業単元:C言語の基礎A1
[2] 問題文(含コード&リンク): 借入金・月々の返済額・金利率/月を入力し、
借入金の返済のシミュレーションを行うプログラムを作成する。

実行例
借入金 月々の返済額 金利/月(%)を入力:1000,300,5
1月 :返済額は1050円 償還額は300円 残額は750円
2月 :返済額は787.5円 償還額は300円 残額は487.5円
3月 :返済額は511.875円 償還額は300円 残額は211.875円
4月 :返済額は222.46875円 償還額は223円 残額は0円

返済額が金利より少ないと無限ループに入るので、
簡単なエラー対策を施す事。

[3] 環境
 [3.1] OS: リナックス
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 5/9
[5] その他の制限: ifやswich文の所まで説明を受けました
数学の標準ライブラリは基本使用不可、
返済額の計算に対し、「実数の小数点以下の端数を切り上げる」といったもののみ可

301 :デフォルトの名無しさん:2006/05/07(日) 17:38:22
>>300
>2月 :返済額は787.5円 償還額は300円 残額は487.5円
>実数の小数点以下の端数を切り上げる
切り上げてないじゃん

302 :デフォルトの名無しさん:2006/05/07(日) 17:58:46
>>299
>>1にあるとおり、出題された文章を勝手に添削することはしないでください。
その1文があるか無いかで随分方針が変わるもんです。

int kuji( int l, int m, int n ) {
int i, j, rnds[KUJI_NUM], nums[KUJI_NUM], cnt = 0 ;

srand( time(NULL) ) ;

nums[0] = l ;
nums[1] = m ;
nums[2] = n ;

//Generate random numbers
for( i=0; i<KUJI_NUM; i++ )
rnds[i] = rand( )%MAX_RND + MIN_RND ;
↑までの部分を↓にしてください。そうすれば#include<stdlib.h>外せます。
int kuji( int l, int m, int n ) {
int i, j, cnt = 0;
int nums[] = {l, m, n}, rnds[] = {1, 2, 3}; // ここの1,2,3の部分が「適当に決めた番号」に該当する


303 :207:2006/05/07(日) 18:15:13
>>302
こちらの不手際でご迷惑をおかけしました…
大変申し訳ありませんでした。気をつけます。

どうにか解決出来ましたので、質問は以上にします。
長く書いてしまいすみませんでした。
ありがとうございました。

304 :デフォルトの名無しさん:2006/05/07(日) 18:30:58
>>301
>切り上げてないじゃん
申し訳ありません、こちらの表記をミスってしまいました。
小数点以下の端数の切り上げを行うのは、
最後の償還額、でした。


305 :260:2006/05/07(日) 18:59:33
>>261
特に書いてなかったです。

>>275>>276>>278->>282
すいません!

平均:初期値をゼロとして、累積和を求めておき、最後に累積回数で割る。
二次モーメント:初期値をゼロとして、二乗の累積和を求めておき、最後に累積回数で割る。
分散:二次モーメントと平均の二乗との差。
標準偏差:分散の平方根。

って課題の隅っこに書いてありました。申し訳ない。

306 :デフォルトの名無しさん:2006/05/07(日) 19:31:04
>>260のをやってみたんだけど
明らかに平均、分散、標準偏差がおかしいんだよね
助けてエロイ人
#include <stdio.h>
#include <math.h>
#define N 20000
int a = 1229, b = 351750, c = 1664501;
int int_rand(int r){ return ((a * r + b) % c); }
double real_rand(int r){ return ((double)r / c); }
int main(void){
int i, j, k, l = 1, r = 1, a[100]={0};
double x, y, e, v, o;
while(l <= 10){
e = 0; v = 0;//初期化
for(i = 0; i < 100; i++) a[i]=0;
for(i = 0; i < N; i++){//乱数発生
r = int_rand(r);
if(i % 2 == 0) x = real_rand(r);
else y = real_rand(r);
if(i % 2 == 1){ j = x * 10, k = y * 10; a[j + k * 10]++; }
}
for(i = 0; i < 100; i++){ e += a[i]; v += pow(a[i], 2); }//平均,分散,標準偏差計算
e /= 100; v /= 100; v -= e; o = sqrt(v);
printf("%d回目:平均=%f 分散=%f 標準偏差%f\n", l, e, v, o);
l++;
}
return 0;
}

307 :デフォルトの名無しさん:2006/05/07(日) 19:46:14
[1] 授業単元
C言語
[2] 問題文
4×4のマス目に1〜16までの数字を入れて、
縦横ななめ、全て足して同じになるように
入れる方法が[魔方陣って言うんだっけ?]何通りあるかを確かめるプログラム
[3] 環境
 [3.1] OS:家Windows XP 学校Linux
 [3.2] コンパイラ名とバージョン 知りません学校のLinuxは新しい奴やったはず
 [3.3] 言語: できればC言語で
[4] 期限: 2006年05月08日まで[提出9日
[5] その他の制限:特に指定は無し

結構急な依頼ですがよろしくです




308 :デフォルトの名無しさん:2006/05/07(日) 19:56:23
>>306
分散:二次モーメントと”平均の二乗"との差
って所かな?

309 :デフォルトの名無しさん:2006/05/07(日) 20:16:08
>>308
なーる、じゃこんな感じか…でも、平均が全部100ってコレ
#include <stdio.h>
#include <math.h>
#define N 20000
int a = 1229, b = 351750, c = 1664501;
int int_rand(int r){ return ((a * r + b) % c); }
double real_rand(int r){ return ((double)r / c); }
int main(void){
int i, j, k, l = 1, r = 1, a[100]={0};
double x, y, e, v, o;
while(l <= 10){
e = 0; v = 0;//初期化
for(i = 0; i < 100; i++) a[i]=0;
for(i = 0; i < N; i++){//乱数発生
r = int_rand(r);
if(i % 2 == 0) x = real_rand(r);
else y = real_rand(r);
if(i % 2 == 1){ j = x * 10, k = y * 10; a[j + k * 10]++; }
}
for(i = 0; i < 100; i++){ e += a[i]; v += pow(a[i], 2); }//平均,分散,標準偏差計算
e /= 100; v /= 100; v -= pow(e, 2); o = sqrt(v);
printf("%d回目:平均=%f 分散=%f 標準偏差%f\n", l, e, v, o);
l++;
}
return 0;
}

310 :255:2006/05/08(月) 00:27:02
>307

ごりごり力技で組むとすごいことになると思うのですが、
なにかヒントとかアルゴリズムとかはないのですか?

311 :デフォルトの名無しさん:2006/05/08(月) 00:40:07
1〜16の順列組み合わせでそ?
再帰使うのがセオリーかと

312 :デフォルトの名無しさん:2006/05/08(月) 00:47:15
いま >>307 用の総当たり型の実装は終わったんだけど2億通り以上あるから
実行してもプロンプト帰ってきません。

313 :デフォルトの名無しさん:2006/05/08(月) 00:47:43
よくわからんが16の階乗ってこと?
そんな量計算できなくないかなぁ

314 :デフォルトの名無しさん:2006/05/08(月) 00:50:17
合計は必ず34

315 :デフォルトの名無しさん:2006/05/08(月) 00:55:39
199414
6121711
1371016
818155

これ計算してみ46になるぞ
どうゆう4方陣のどの場合なのか数式示してくれ

316 :デフォルトの名無しさん:2006/05/08(月) 00:57:30
19 9 4 14
6 12 17 11
13 7 10 16
8 18 15 5

すまね

317 :デフォルトの名無しさん:2006/05/08(月) 00:57:49
4×4のマス目に1〜16までの数字を入れて

318 :デフォルトの名無しさん:2006/05/08(月) 01:01:04
問題文も読めない 315 が居る
すれはここでつか?

319 :デフォルトの名無しさん:2006/05/08(月) 01:08:37
おすまねw、酔っ払いは引っ込んだほうがいいな
A+K = B+L = C+I = D+J = E+O = F+P = G+M = H+N = 17
が満たせるか判別すりゃいいんでね

320 :デフォルトの名無しさん:2006/05/08(月) 01:34:09
16!=20922789888000(20兆9227億8988万8000)

321 :312:2006/05/08(月) 01:36:43
ホントだ。>>312 で2億がどうこういってる計算はオーバーフローしてたよ。

322 :208:2006/05/08(月) 02:00:27
>>297
うへ、すっかりわすれとりました。ご指摘感謝致します。

323 :デフォルトの名無しさん:2006/05/08(月) 02:00:59
>>307
> 縦横ななめ、全て足して同じになるように
ななめ、っていうのは対角線のことだけでOK?

というのは、完全方陣というのがあるから言うわけだけど
http://ja.wikipedia.org/wiki/%E9%AD%94%E6%96%B9%E9%99%A3#.E5.AE.8C.E5.85.A8.E6.96.B9.E9.99.A3

324 :デフォルトの名無しさん:2006/05/08(月) 02:10:08
#include <stdio.h>
int s[16]={0},f[16]={0},c=0;
int j1(){return s[0]+s[1]+s[2]+s[3]==34;}int j2(){return s[0]+s[4]+s[5]+s[6]==34;}
int j3(){return s[4]+s[7]+s[8]+s[9]==34;}int j4(){return s[3]+s[8]+s[10]+s[6]==34;}
int j5(){return s[1]+s[7]+s[10]+s[11]==34;}int j6(){return s[5]+s[10]+s[12]+s[13]==34;}
int j7(){return s[2]+s[8]+s[12]+s[14]==34;}
int j(){return s[6]+s[11]+s[14]+s[15]==34&&s[3]+s[9]+s[13]+s[15]==34&&s[0]+s[7]+s[12]+s[15]==34;}
void print(){printf("%2d %2d %2d %2d\n",s[0],s[1],s[2],s[3]);printf("%2d %2d %2d %2d\n",s[4],s[7],s[8],s[9]);
printf("%2d %2d %2d %2d\n",s[5],s[10],s[12],s[13]);printf("%2d %2d %2d %2d\n",s[6],s[11],s[14],s[15]);}
void search(int pos){int i;
switch(pos){case 4:if(!j1())return; break;case 7:if(!j2())return; break;case 10:if(!j3())return; break;
case 11:if(!j4())return; break;case 12:if(!j5())return; break;case 14:if(!j6())return; break;case 15:if(!j7())return; break;
case 16:if(!j())return; print(); printf("\n"); ++c; return;}
for(i=0;i<16;++i)if(!f[i]){f[i]=1;s[pos]=i+1;search(pos+1);f[i]=0;}}
main(){search(0);printf("%d通り\n",c);}

ラインの判定は全て埋めたあとではなく、各ラインが埋まったらすぐに判定する。
なるべく早くに多くのラインを判定できるよう埋め方を工夫する。

325 :デフォルトの名無しさん:2006/05/08(月) 02:36:34
やっぱり >>324 みたいにしないとむりか。
完全に順列総当たりだと一時間走らせても一つも見つからなんだ。

http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27666
使い物にならん遅さだしなんかトップの方の実装いい加減だけど作ったから貼る

326 :デフォルトの名無しさん:2006/05/08(月) 04:12:17
>>324
いやはやすごいですね・・・
おれもアルゴリズムの勉強したいけど、どういう本読めばいいのかな

327 :デフォルトの名無しさん:2006/05/08(月) 05:35:03
>>326
324じゃないけど,アルゴリズムの本なら

・コルメン他,アルゴリズムイントロダクション
・セジウィック,アルゴリズムC
・石畑,アルゴリズムとデータ構造
・杉原,データ構造とアルゴリズム

が俺のお勧め.上から俺が良いと思う順.

コルメンは全体的に難しく,実装も詳しくは書かれていないので,
最初に読むには辛いかも.全部買うと高いし.ゼミで読んだ本.
セジウィックも良い本で,コードもそれなりに乗ってるけど,
まだ難しい.上と同じくちょと高め.学部の準教科書だった.
石畑は和書では最も良いものの一つかも.コードも乗ってるし,
説明もそれなりに分かりやすい.上二つより安いし.学部の準教科書.
杉原は薄くて安いわりにはしっかり書いてある.取っ掛かりには良いかも.
コードは詳しくは書かれてない.学部の教科書だった.

328 :デフォルトの名無しさん:2006/05/08(月) 05:52:41
>>327
どうも、とても参考になります

329 :デフォルトの名無しさん:2006/05/08(月) 09:50:38
対称解は除去せんでええのかな?

330 :デフォルトの名無しさん:2006/05/08(月) 10:52:52
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):
英文が格納されているファイルe-text.txtを開き、読み込んだデータから
改行を全て取り除いた上で各行が第一引数で与えた数になるように整形し、
その結果をwordwrap.txtへ書き出すプログラムを作成せよ。
改行を取り除く時、文末の単語と次の行の単語が繋がらないように、必要に
応じて空白を挿入すること。また、行頭に空白や ’,’および '. 'が来ても
構わないとする。
例えば、以下のファイル内容に対して引数に20を与えたとき、wordwrap.txtは
以下のようになる。
<内容>
the constitution of japan(november 3, 1946).
we, the japanese people, acting through our duly
elected representatives in the national diet,
determined that we shall secure for ourselves

<wordwrap.txt>
the constitution o
f japan(november 3,
1946). we, the japa
nese people, acting
through our duly ele
cted representatives
in the national die
t, determined that w
e shall secure for o
urselves


331 :デフォルトの名無しさん:2006/05/08(月) 10:53:42

[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ:gcc
 [3.3] 言語: C
[4] 期限: 5月9日
[5] その他の制限: 標準ライブラリの使用、という章で課されました。
よろしくお願い致します。

332 :デフォルトの名無しさん:2006/05/08(月) 11:01:08
内容と、wordwrap.txtがずれてしまったので、
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1843.txt
に置き直しました。

333 :デフォルトの名無しさん:2006/05/08(月) 12:04:33
"1946)."と"we,"の間に空白が2つあるのはなんで?

334 :デフォルトの名無しさん:2006/05/08(月) 12:25:55
内容側に1946)."と"we,"の間に空白が2つありましたが、
332の方で入れ忘れました..orz

335 :デフォルトの名無しさん:2006/05/08(月) 12:53:05
空白が2つあったのなら、改行と合わせて3つにならね?
それとも「必要に応じて」って、前後に空白があるときは入れないって言ってる?

336 :デフォルトの名無しさん:2006/05/08(月) 14:34:14
>>335
空白は1つですね。改行の事を忘れていました..。


337 :デフォルトの名無しさん:2006/05/08(月) 14:53:16
>>330
#include <stdio.h>
#include <stdlib.h>
#define I "e-text.txt"
#define O "wordwrap.txt"
#define ARGERR() fprintf(stderr, "引き数が不正です。\n");
#define OPNERR(f) fprintf(stderr, "%sのopenに失敗しました。\n", f)
main(int c,char*v[]){FILE *i,*o;int w=c==2?atoi(v[1]):0,b,n;
if(!w){ARGERR();return 1;}
i=fopen(I,"r");if(!i){OPNERR(I);return 1;}
o=fopen(O,"w");if(!o){OPNERR(O);fclose(i);return 1;}
n=0;while((b=fgetc(i))!=EOF){if(n++==w){fputc('\n',o);n=1;}if(b=='\n')b=' ';fputc(b,o);}
fclose(i);fclose(o);return 0;}

338 :307:2006/05/08(月) 18:23:12
すみません>>307です
朝はよーから学校行ってました[昨日はあれから消してた
多々の突っ込み[ >>323など]ありますが
完全方陣でやれとも言われて無いのでプログラム作る人に完全に投げてました。
申し訳ないです
>>324のプログラムは凡人のオイラにはわからないので
もっと勉強した時にもう一度見てみます。 >>324さんありがとうございました
>>324さん以外にも問題して頂いた方ありがとうございました。

339 :デフォルトの名無しさん:2006/05/08(月) 19:52:24
なにが分からないんだろう…?
インデントを除けば、難しい部分はどこにもないと思うが。
そもそもプログラミングに興味がなく読む気がない人には「難しい」でしょうが。

340 :デフォルトの名無しさん:2006/05/08(月) 20:33:30
プログラム的には簡単だけど内容はかなりむずいんじゃないか?

341 :デフォルトの名無しさん:2006/05/08(月) 21:53:51
示されているプログラムは完成形なんで、思考の過程が見えないというのはあるかもですね。

342 :デフォルトの名無しさん:2006/05/08(月) 21:55:23
順列を求めるプログラムさえパッと出てこない俺にはかなりキツかったよ・・・

343 :デフォルトの名無しさん:2006/05/08(月) 22:00:44
一、プログラミング
問題、2*3*1=6のプログラムを作成せよ

344 :デフォルトの名無しさん:2006/05/08(月) 22:04:16
これはかつてない難問だな。

345 :デフォルトの名無しさん:2006/05/08(月) 22:14:26
SCANF関数を使用が条件

346 :デフォルトの名無しさん:2006/05/08(月) 22:27:04
[1] 授業単元:343改題
[2] 問題文(含コード&リンク):

数式を計算するプログラムを作成せよ.ただし処理すべき数式は
・扱う数は int で扱える程度の正の整数.
・足し算,掛け算,べき乗,括弧に対応すること.
・べき乗は右結合する( 2^3^4 = 2^(3^4) ).
・演算順序は「括弧 > べき乗 > 掛け算 > 足し算」.
・数式中にスペースが入っていても構わない.

入力
・1行に数式が1つ.
・終了するときは quit と入力.

出力
・各行に対してその計算結果.
・不正な式に対しては適当なエラーメッセージを表示すること.

[3] 環境:略
[4] 期限:暇なときにでもどうぞ.

347 :デフォルトの名無しさん:2006/05/08(月) 23:25:26
【課題内容】Bのプログラムを参考にして、data.txtというファイルにあるデータを検索するようにAのプログラムを変更せよ。
なお、Aのプログラムは二分探索である。Bのプログラムはファイル操作。


348 :デフォルトの名無しさん:2006/05/08(月) 23:27:39
>347です。
【Aのプログラム】
#include <stdio.h>
#define KAIIN_NUM 10
void ShojunSort(int array[], int num);
int main(int argc, char* argv[])
{int kaiin[] = { 555, 222, 789, 444, 456, 666, 123, 777, 111, 333 };
int n;int left, middle, right;
printf("会員番号:");scanf("%d", &n);
ShojunSort(kaiin, KAIIN_NUM);
left = 0;right = KAIIN_NUM - 1;
middle = (left + right) / 2;
while (kaiin[middle] != n)
{if (kaiin[middle] > n)
{right = middle - 1;
}else{left = middle + 1;
}middle = (left + right) / 2;
if (left > right)
{printf("見つかりません。\n");
return0;}}
printf("%d番目に見つかりました。\n", middle);
return 0;}void ShojunSort(int array[], int num)
{int i, j;int temp;
for (i = 0; i <= num - 1; i++)
{for (j = num; j > i; j--)
{if (array[j] < array[j - 1])
{temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
}}}return;}

349 :デフォルトの名無しさん:2006/05/08(月) 23:28:16
>347です。
【Bのプログラム】
#include <stdio.h>
#include <stdlib.h>
#define b_size 256
int main(int argc, char *argv[]){
FILE *fpr;
int i=0, j, kaiin[100];
pr=fopen("data.txt", "r");
if(fpr == NULL){
printf("ファイルが見つかりません。\n");
return 0;
}
while((fscanf(fpr, "%d", &kaiin[i]))!=EOF){
i++;
}
fclose(fpr);
for(j=0;j<i;j++)
printf("kaiin[%d]=%d\n",j,kaiin[j]);
return 0;
}

350 :デフォルトの名無しさん:2006/05/08(月) 23:29:11
>347です。
【data.txt】
123
415
655
623
645
222
524
778
433
235
786
425
746
973
129
541
235
125
546
431
436

351 :デフォルトの名無しさん:2006/05/08(月) 23:29:54
>347です。
以上、お願いします。

352 :デフォルトの名無しさん:2006/05/08(月) 23:36:34
>>347

>>1 を読んで出直してきてください。

353 :デフォルトの名無しさん:2006/05/08(月) 23:43:22
>>347です。

【課題内容】Bのプログラムを参考にして、data.txtというファイルにあるデータを検索するようにAのプログラムを変更せよ。
なお、Aのプログラムは二分探索である。Bのプログラムはファイル操作。
【開発環境・コンパイラ】Microsoft Visual Studio .NET 2003
【授業単元】C言語
【期日】5月9日
【OS】Windows XP

プログラムAは>>348 で プログラムBは>>349 です。

354 :デフォルトの名無しさん:2006/05/09(火) 00:02:51
あれ、プログラムAがエラーはく

355 :デフォルトの名無しさん:2006/05/09(火) 00:11:02
>>353
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1862.txt
あ、fcloseやってないや、追加しといて

356 :デフォルトの名無しさん:2006/05/09(火) 00:12:05
>>347です。
>>354
これが、プログラムAです。▼
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1863.txt


357 :デフォルトの名無しさん:2006/05/09(火) 00:16:56
>>356です
すみません、間違えました。正しくは、
http://kontagogo.hp.infoseek.co.jp/cgi-bin/src/up0216.txt
です。

358 :デフォルトの名無しさん:2006/05/09(火) 00:25:58
>>347
すでに 355 が出てるけど、もったいないので。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1864.c

359 :デフォルトの名無しさん:2006/05/09(火) 01:04:41
こんばんは、
windows,gcc,c言語です。
次の問題わかる方いらっしゃったら教えてください。

問題

C言語で表示できる最小の実数を表示する(求める)プログラムを作りなさい。



forとかwhileとかの簡単なものだけで作れるプログラムでお願いします。

360 :デフォルトの名無しさん:2006/05/09(火) 01:06:23
>>359
>>1 を読んで出直してきてください。



361 :デフォルトの名無しさん:2006/05/09(火) 01:12:31
>>359
#include <stdio.h>
#include <float.h>

int main(void)
{
  printf("%Lg", LDBL_MIN);
  return 0;
}

362 :359:2006/05/09(火) 01:14:10
すいません。テンプレ読みました。

[1] 授業単元: プログラミング言語
[2] 問題文(含コード&リンク): C言語で表示できる最小の実数を表示する(求める)プログラムを作りなさい。
[3] 環境
 [3.1] OS: windows [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:c
[4] 期限: 今日、明日中でお願いします。
[5] その他の制限: forとかwhileとかの簡単なものだけで作れるプログラムでお願いします。

363 :359:2006/05/09(火) 01:17:04
>>361
やろうと思えば簡潔にできるんですね。
ですがもう少し求めるプロセスを含んだものが好ましいというか、
おそらくそれではストレートに答えすぎて点数がもらえない気がします。すいません。

364 :デフォルトの名無しさん:2006/05/09(火) 01:37:56
>>359
#include <stdio.h>
int main(void) {
printf("-");
while(1) { printf("9"); }
return 0;
}


365 :359:2006/05/09(火) 01:45:39
>>361
%Lgってなんですか?ぐぐったんですがわからなくて、もしよければ教えてください。
>>364
それは教授に怒られそうです。

366 :デフォルトの名無しさん:2006/05/09(火) 01:46:36
>364
同じ考えの奴っているんだな。俺はputchar()だったが。

367 :デフォルトの名無しさん:2006/05/09(火) 02:20:51
実行したら10*20*30=6000とでるようなプログラムを教えてください。scanf関数使用が条件です。今日〆切りなんです。今してるんですが、全然分かりません。

368 :デフォルトの名無しさん:2006/05/09(火) 02:22:18
>367
>1読め。

369 :デフォルトの名無しさん:2006/05/09(火) 02:25:04
はいはいマルチマルチ

370 :デフォルトの名無しさん:2006/05/09(火) 02:25:33
>>365
分からない筈は無い。
ググり方を考えろ。

371 :デフォルトの名無しさん:2006/05/09(火) 02:26:52
[1] 授業単元:画像処理
[2] 問題文(含コード&リンク):

http://nigauri.sakura.ne.jp/src/up5160.jpg
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: BCC32
 [3.3] 言語: C++
[4] 期限: 2006年05月12日17:00まで
[5] その他の制限:

372 :デフォルトの名無しさん:2006/05/09(火) 02:29:19
ふざけすぎだな。お前のせいで30日間このスレ停止な

373 :デフォルトの名無しさん:2006/05/09(火) 02:31:41
>>371
#include <iostream>

int main() {
 std::cout << "ttp://www.nigauri.sakura.ne.jp/src/up5176.jpg.html" << std::endl;
}

374 :デフォルトの名無しさん:2006/05/09(火) 02:32:16
教えてください(´・ω・`)

375 :デフォルトの名無しさん:2006/05/09(火) 02:49:32
#include<stdio.h>
#include <stdarg.h>

int scanf(const char *format, ...){
va_list arg;
va_start(arg, format);
vprintf(format, arg);
va_end(arg);
return 0;
}

int main(void){
scanf("%s*%s*%s=%s","10","20","30","6000");
return 0;
}

376 :デフォルトの名無しさん:2006/05/09(火) 03:22:30
>367
あと2つのパターンを考えた。

#include<stdio.h>
#include <stdarg.h>

int scanf(const char *format, ...){
va_list arg;
char *p,**d;
va_start(arg, format);
d = va_arg(arg,char **);
for(p=(char *)format;*p;++p){
printf(*d++);
putchar(*p);
}
va_end(arg);
return 0;
}

int main(void){
char* data[] = {"10","20","30","600"};
scanf("**=0",data);
return 0;
}


377 :367:2006/05/09(火) 03:24:49
バロスwww結局わかんねーんだなwwおまえらm9(^Д^)プギャー

378 :デフォルトの名無しさん:2006/05/09(火) 03:25:29
#include<stdio.h>
#include <stdlib.h>

int scanf(const char *format, ...){
int i,d,k;
int buf[256] = {0};
d = atoi(format);
k = 0;
for(i=1;i<d;++i) if(!(d % i)) buf[k++] = i;
for(i=0;i<k;++i) printf("%d0%c",buf[i],i<k-1?'*':'=');
printf("%s000",format);
return 0;
}

int main(void){
scanf("6");
return 0;
}

>375も含めて3つ。どれか好きなの選べ。あー眠い。

379 :デフォルトの名無しさん:2006/05/09(火) 03:25:45
エスパーじゃないからワカンネーな。

380 :デフォルトの名無しさん:2006/05/09(火) 05:58:55
>>347です。

>>358を参考にして動作しました。ありがとうございまいた。
なんか、掲示板を分かりにくく書いてごめんなさい。


381 :デフォルトの名無しさん:2006/05/09(火) 11:17:58
>>367
int main()
{
  int ch;
  puts("10*20*30=6000");
  scanf("%c",&ch);
  return 0;
}

382 :367:2006/05/09(火) 12:31:22
皆さんありがとうございます。昨日は偽物もでましたが、助かりました

383 :デフォルトの名無しさん:2006/05/09(火) 14:59:06

[1] 授業単元: プログラミング2
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1865.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc -Wall
 [3.3] 言語: C
[4] 期限: 2006年05月10日
[5] その他の制限:配列の中身の丸ごとコピーはなるべく避ける。配列は3つまで宣言してもよい。

助けてください。お願いしますm(__)m

384 :デフォルトの名無しさん:2006/05/09(火) 15:46:18
やったーーーーーーー!!!!
PC直たよ〜!!
辞書も初期化だよ〜!!
全部入れなおしだよ〜!!
何が入ってたか覚えてないよ〜!!

385 :デフォルトの名無しさん:2006/05/09(火) 19:45:33
*p[10] と (*p)[10] ってどうちがうんですか?

386 :デフォルトの名無しさん:2006/05/09(火) 19:52:16
>>385
前者はポインタの配列
後者は配列へのポインタ

387 :デフォルトの名無しさん:2006/05/09(火) 20:42:16
>>383
てきとうに。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1866.c

388 :デフォルトの名無しさん:2006/05/09(火) 21:13:31
質問スレから誘導されてきました。

スペースで区切られた文字列を分割する関数を作ります。
・連続するスペースはひとつの区切りとしない
・スペースがない場合は全ての文字列を返す
・頭や後ろにつくスペースは無視
・返す文字列がない場合はNULLを返す
・初期値の文字列はNULLを引数に与えている間に変更されないもとする
・#include<string.h>は使わない

引数は( char * , const char * )です。
第1引数は区切られた文字列の格納先
第2引数はスペースで区切られた文字列(次の文字列を探す時はNULLを指定)

ですが、さっぱりわかりません。
どうか教えてください。

389 :デフォルトの名無しさん:2006/05/09(火) 21:20:09
テンプレ忘れました。すみません
[1] プログラミング演習
[2]
[3] 環境
 [3.1] Windows
 [3.2] gcc
 [3.3] C
[4] 明日まで
[5] string.hは禁止


390 :デフォルトの名無しさん:2006/05/09(火) 21:26:46
内容:
[1] 授業単元: コンピュータ言語演習
[2] 問題文(含コード&リンク):
ある人数分の身長データがある。標準入力から、人数と身長データを入力し、
その平均値を出力するプログラムを、以下の条件を満たすように作成せよ

・身長データを格納するメモリ領域へのポインタ変数(float型)を宣言すること
・人数が決まった段階で、malloc()とsizeof演算子を用いて必要な分だけメモリ領域を確保すること
・確保した領域は、必要が無くなった時点でfree()を使って開放すること
・結果として、平均値のほかに次の内容も表示すること
 -宣言したポインタ変数のアドレス
-確保したメモリ領域へのポインタの値
-各身長データが格納されたアドレスと格納された値(人数)
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: c
[4] 期限: 5月10日PM5:00

よろしくお願いします(´・ω・`


391 :デフォルトの名無しさん:2006/05/09(火) 21:56:42
>>389
「返す」というのは、第1引数に格納するという意味? 戻り値はなし?
「無視」というのは、区切り文字とは扱わないという意味? それとも第1引数に格納もしないっていう意味?

392 :389:2006/05/09(火) 22:10:11
返すのは第1引数に格納した区切った文字列です。
連続したスペース、文末のスペースは区切りとは扱わないです。
わかりにくくてすみません


393 :デフォルトの名無しさん:2006/05/09(火) 22:12:51
[1] 授業単元:
[2] 問題文(含コード&リンク):
上端が固定された長さlの軽いひも(伸び縮みしない)の下端に質量mの小さな重りがついている。
鉛直下方からのひもの角度θの時間変化は次の方程式できまる。

m * l * d^2θ/dt^2 = −m * g * sinθ

gは重力加速度で9.8m/s^2とする。ひもの長さが25cmのとき
θ=5°になるまで持ち上げそっと放したとき、重りが1往復する時間は何秒か? 
またθ=10°のときでは何秒になるかを求めるプログラムの作成
答えの時間は小数点以下2位まで出すこと

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 5月11日木曜
[5] その他の制限: 特にないです
お願いします

394 :393:2006/05/09(火) 22:14:26
授業単元書き忘れてました
[1] 授業単元:演習T

395 :デフォルトの名無しさん:2006/05/09(火) 22:27:09
>>389
抜けがあるかも
char *tokenize(char *t, const char *s){
  static const char *s_ = "";
  char *t_ = t;
  s_ = s ? s : s_;
  while ( *s_ ){
    if ( *s_ != ' ' ) *t_++ = *s_++;
    else{
      if ( s_ == s || *(s_+1) == ' ' || *(s_+1) == '\0') while ( *s_ == ' ' ) *t_++ = *s_++;
      else{
        ++s_;
        break;
      }
    }
  }
  *t_ = '\0';
  return t_ == t ? 0 : t;
}

396 :デフォルトの名無しさん:2006/05/09(火) 22:29:46
>395
ありがとうございます。

397 :デフォルトの名無しさん:2006/05/09(火) 23:04:08
>>393
#include <stdio.h>
#include <math.h>

int main(int argc, char *argv[])
{
    double t = 0, dt = 0.00001;
    double grad, dotgrad = 0, ddotgrad = 0, odotgrad;
    double gravity = 9.8, len = 0.25;

    if (argc < 2 || sscanf(argv[1], "%lf", &grad) < 1) {
        printf("Usage: %s 開始角度(°)\n", argv[0]);
        return 0;
    }
    grad *= M_PI / 180.0;
    printf("角度 %3.0lf", grad / M_PI * 180);

    while (1) {
        ddotgrad = (-gravity / len * sin(grad));
        odotgrad = dotgrad;
        dotgrad += dt * ddotgrad;
        grad += dt * dotgrad;
        t += dt;

        if (dotgrad <= 0 && odotgrad > 0)
            break;
    }
    printf(" 周期 %3.3lf\n", t);
    return 0;
}

398 :デフォルトの名無しさん:2006/05/09(火) 23:28:14
>>390
#include <stdio.h>
#include <stdlib.h>

int main(void){
float *h, avr = 0;
int i, n;
puts("人数n =");
scanf("%d", &n);
h = (float*)malloc(sizeof(float)*n);
if(h == NULL)return 1;
for(i = 0; i < n; i++){
scanf("%f", &h[i]);
avr += h[i];
}
avr /= n;
printf("average:%f\n", avr);
printf("ポイント変数のアドレス:%d\n", &h);
printf("メモリへのポインタの値:%d\n", h);
for(i = 0; i < n; i++)
printf("%d人目 アドレス:%d 値:%f\n", i + 1, &h[i], h[i]);
free(h);
return 0;
}

399 :393:2006/05/09(火) 23:32:07
>>397
11行目が表示されて終わるんですけど、どうしたらいいですか??

400 :デフォルトの名無しさん:2006/05/09(火) 23:37:35
>>399
用法用量を守って正しくお使いください

401 :397:2006/05/09(火) 23:50:20
>>399
コンパイルしたプログラムを実行するときに、実行ファイル名の後に開始角度を
数字で付けてください。

例)
  D:\tmp>keisan 10
            ↑ここ

402 :393:2006/05/09(火) 23:55:18
>>401
実行できました。ありがとうございました

403 :デフォルトの名無しさん:2006/05/10(水) 00:20:38
【質問テンプレ】
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク):
プログラムに変更を加えていき、実行時間の変化をもとに最適化について考察する。
[3] 環境
 [3.1] OS: Windows (cygwin)
 [3.2] コンパイラ名とバージョン: (gcc)
 [3.3] 言語: (C)
[4] 期限: ([2006年5月11日23:00まで])
[5] その他の制限: 初心者用の授業になってます

質問が長いのでろだにアップロードしました。よろしくお願いいたします。


404 :デフォルトの名無しさん:2006/05/10(水) 00:24:10
>>403
その問題文のアドレスをここに貼りなさい。ろだだけで伝わるわけがないでしょう。

405 :デフォルトの名無しさん:2006/05/10(水) 00:32:34
>>403
言語の所の(C)がCopyrightに見えた

406 :デフォルトの名無しさん:2006/05/10(水) 00:34:04
>>404
すみません、ろだでうまくアップロードができていないので今やっている最中です
連コになるかもしれませんが、できたらもう一度ここでカキコします

407 :デフォルトの名無しさん:2006/05/10(水) 00:35:19
これでは?
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1868.txt

408 :デフォルトの名無しさん:2006/05/10(水) 00:40:14
>>309
遅くなりましたが、ありがとうございました。感謝します。

409 :デフォルトの名無しさん:2006/05/10(水) 00:47:02
>>404
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1871.txt
です。
ろだではC米という名前で投稿させていただいてます
よろしくお願いします。

410 :デフォルトの名無しさん:2006/05/10(水) 01:23:40
まあ、あえて言えば、ロダで新しくスレッドを建てないで
問題文全部テキストにでも書いて、それをロダの既存のスレにあげて
そのアドレスを張ればよかったんじゃないか

411 :デフォルトの名無しさん:2006/05/10(水) 01:36:12
>>410
そうですね... orz
次回から気をつけます、良いことを学びました otz

412 :390:2006/05/10(水) 07:18:55
>>398
助かりました。ありがとうございます。

413 :デフォルトの名無しさん:2006/05/10(水) 07:34:44
[1] 授業単元: プログラミング2
[2] 問題文(含コード&リンク):
1/1^2+1/2^2+・・・+1/100000^2を計算するプログラムを作成せよ。
1/1+1/2^2+・・・の順に項を加えた場合と、1/100000^2+1/99999^2+・・・の順に項を加えた場合
それぞれについて、floatとdoubleで計算した結果を比較せよ。
また上記の級数の極限についてしらべてわかったことをコメント欄に記せ

[3] 環境
 [3.1] OS: Win
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: C
[4] 期限: あした
[5] その他の制限: ありません


お願いします!

414 :灰色の幽霊:2006/05/10(水) 08:28:55
http://www-ise2.ist.osaka-u.ac.jp/~hasimoto/eic06/kadai060427.pdf
期限は今日の5時まで。
全てではなくてもいいので、少しでも解けたら、レスをお願いします。
C言語でお願いします。
環境はサン・・・サンレイ?みたいなやつです。
コンパイラ名もわかりません。端末エミュレータを使います。
コンパイルするにはgccでコンパイルします。これでわかりますか?
(1)だけでもいいのでお願いします。

415 :デフォルトの名無しさん:2006/05/10(水) 08:56:24
>>413
#include <stdio.h>

double square(double x)
{
return x * x;
}

int main(void)
{
static double n;
unsigned long i;

for (i=0; i<100000; ++i)
n += square((double)1 / (double)(i+1))
printf("%lf\n", n);

return 0;
}

コンパイルは通してないが多分動くと思う
float版は面倒なんで勝手にやってくれ
おそらく+float -doubleでいける

足し合わせる順序は情報落ち(だっけ?)が起こるかどうかの違い
絶対値の大きく違う2数の加減を行うと、絶対値の小さい方の情報が文字通り落ちることがある
1億に0.0000000000000001を足したところで何の影響もないだろ?

416 :デフォルトの名無しさん:2006/05/10(水) 08:58:40
>>409
単純選択ソートか?
あれの最適化って言うと両側からやっていくやつとかだっけ

417 :デフォルトの名無しさん:2006/05/10(水) 09:06:36
>>414
大学のページそのまま晒すなんて勇気のある奴だなw

#include<stdio.h>
#include<stdlib.h>

int rn(int x){
  const int A=48109,B=2531011,M=32768;
  return (A*x+B) % M;
}

int main(int argc,char *argv[]){
  int i,xn;

  if(argc !=2){
    printf("set xn\n");
    exit(1);
  }
  xn = atoi(argv[1]);

  printf("xn:%d\n",xn);
  for(i=0;i<10;i++){
    xn = rn(xn);
    printf("xn+%d:%d\n",i+1,xn);
  }
  return 0;
}

418 :デフォルトの名無しさん:2006/05/10(水) 09:08:31
>>414
ちょwwwwwよく見たら俺の大学wwwwwwwww

419 :デフォルトの名無しさん:2006/05/10(水) 09:17:25
この課題うちの大学でもやったことあるわ

420 :デフォルトの名無しさん:2006/05/10(水) 10:01:10
>>414 一応(2)、あってるかどうかはしらんwwww
#define N 4000
int main(int argc,char *argv[]){
  int i,j,xn,r[10];
  xn = atoi(argv[1]);
  printf("xn:%d\n",xn);
  for(i=0;i<10;i++) r[i] = 0;
  for(i=0;i<N;i++){
    xn = rn(xn)%10+1;
    switch(xn){
      case 1: r[0]++; break;
      case 2: r[1]++; break;
      case 3: r[2]++; break;
      case 4: r[3]++; break;
      case 5: r[4]++; break;
      case 6: r[5]++; break;
      case 7: r[6]++; break;
      case 8: r[7]++; break;
      case 9: r[8]++; break;
      case 10: r[9]++; break;
      default: break;
    }
  }
  for(i=0;i<10;i++){
    printf("%2d: ",i+1);
    for(j=0;j<r[i]/100;j++) printf("*");
    printf("\t\t\t%d\n",r[i]);
  }
  printf("==============================\n");
  printf("  TOTAL            %d\n",N);
  return 0;
}

421 :デフォルトの名無しさん:2006/05/10(水) 10:05:21
みなさんおねがいします。今日の12時までなんで

nCr=n!/r!(n-r)!を計算せよ。なおn!は関数とし、そのプロトタイプ
はlong factorial(long)とせよ。

422 :デフォルトの名無しさん:2006/05/10(水) 12:21:30
>414 (3)
#include<stdio.h>
#include<stdlib.h>

const int A=48109,B=2531011,M=32768;
int rn(int x){
return (A*x+B) % M;
}

int main(int argc,char *argv[]){
int i,xn,m,n;
float x,y;
if(argc !=2){
printf("set xn\n");
exit(1);
}
xn = atoi(argv[1]);
printf("xn:%d\n",xn);
m = 50000; n=0;
for(i=0;i<m;i++){
xn = rn(xn); x = (float)xn/M;
xn = rn(xn); y = (float)xn/M;
if(x*x+y*y< 1) n++;
}
printf("%f\n",(float)4*n/m);
return 0;
}


423 :デフォルトの名無しさん:2006/05/10(水) 14:30:43
[1] 授業単元: ソフトウェア演習
[2] 問題文(含コード&リンク):
疑似乱数を用いて、"大吉,"中吉","小吉","吉","凶","大凶"
を出力し、それぞれの項目のコード4,3,2,1,0を返すおみくじ関数
fortune()を作成せよ。なお、この関数内ではprintfを含ませず、
main関数で出力させること。また、それぞれの項目が現れる確率は、
順番に5.0, 20.0, 50.0,20.0,とする。また、この関数を用いて
2000回のサンプリングを行ったとき、それぞれの項目の出現割合を
出力するプログラムを作成し、上記とほぼ同じ値が得られていることを
検証せよ
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5/12
[5]1つのプログラ厶で全て出力すること

424 :デフォルトの名無しさん:2006/05/10(水) 15:21:57
・main関数に出力させる関数
・1を越える超高確率

前者はCの範囲では不可能
後者は数学的に不可能

425 :デフォルトの名無しさん:2006/05/10(水) 15:37:04
なんか釣りっぽいんだが、不明な箇所は俺のESPで補った
#include<stdio.h>
#include <stdlib.h>
#include <time.h>

int fortune(){
int r,i=0,rate[] = {50,200,500,200};
r = 1000*rand()/RAND_MAX;
while(i<sizeof(rate)/sizeof(int)){
if((r-=rate[i])<0) break;
i++;
}
return i;
}

int main(void){
char *data[] = {"大凶","凶","吉","小吉","大吉,\"中吉"};
int i,r,count[sizeof(data)/sizeof(int)] = {0};
srand(time(NULL));
for(i=0;i<2000;++i){
count[r = fortune()]++;
printf("%s\n",data[r]);
}
for(i=0;i<sizeof(data)/sizeof(int);++i){
printf("%s %d回 %f%\n",data[i],count[i],(float)count[i]/2000);
}
return 0;
}

426 :デフォルトの名無しさん:2006/05/10(水) 15:37:15
出力する内容は6つ
返すコードは5つ
確率は4つ

問題文の問題点を分析して提出すればいんでない?
さらに講師の分裂気味な精神を分析して、最後に専門の病院で診てもらうように勧めればmore better。

427 :デフォルトの名無しさん:2006/05/10(水) 16:50:21
問題分の書き方が悪くて申し訳ありません…orz

・mainに出力 ではなく mainで出力
・確率は各数字に%をつけたもの

でした。
>>425
回答ありがとうございます。当方はまだtime.hを習っておりませんでした。
もしよろしければ、time.hを使わないプログラムを教えてもらえないでしょうか?

428 :デフォルトの名無しさん:2006/05/10(水) 17:00:37
>>423
■問題文から推察されるfortune()の要求仕様まとめ
1. 疑似乱数を用いる
2. "大吉,"中吉"、"小吉"、"吉"、"凶"、"大凶" を出力する
3. それぞれの項目のコードを 4、3、2、1、0 として返す
4. printf() は使用しない
5. 出力は main() 関数に任せる
6. 各項目が出現する確率は 5.0、20.0、50.0、20.0


結論「実現不能」
# 問題文に矛盾が多すぎ。


429 :デフォルトの名無しさん:2006/05/10(水) 17:08:27
あえて言おう、ヘッダを習うとか習ってないとか普通言わない

430 :425:2006/05/10(水) 17:34:09
>time.hを使わないプログラム
srand(time(NULL));を削れ。
毎回同じ乱数が発生する(何度やっても同じ結果が出る)がおそらく仕様は満たしているはず。

431 :デフォルトの名無しさん:2006/05/10(水) 17:41:01
よろしくお願いします。

[科目名]入門C言語2
[問題]X科目の試験の成績(100点満点)と、その教科の単位数を読み込み、
教科の評価を
90〜100点 A
80〜89点  B
70〜79点  C
60〜69点  D
59点以下  E
とする。
Aなら4ポイント、Bなら3、Cなら2、Dなら1、Eなら0とし、
総合評価としてポイントの合計を単位数で割った物を算出するプログラムを求めなさい。
例:A 5単位 B 10単位 C 4単位 で、 (4*5+3*10+2*4)/19=3.05
[環境]
OS:vine linux
コンパイラ:gcc
言語:C
[期限]5/11
[備考]習ったのはif for while文まで
そこから先の事は使用不可、だそうです
よろしくお願いします。

432 :デフォルトの名無しさん:2006/05/10(水) 18:08:50
>>431
#include <stdio.h>

int main()
{
int scr, crdtn, rslt = 0, n = 0;
while(scanf("%d %d", &scr, &crdtn) == 2){
int pnt;
if(scr >= 90)pnt = 4;
else if(scr >= 80)pnt = 3;
else if(scr >= 70)pnt = 2;
else if(scr >= 60)pnt = 1;
else pnt = 0;
rslt += pnt * crdtn;
n += crdtn;
}
printf("%g\n", (double)rslt / n);
return 0;
}
「100 5」のように点数 単位数とスペースで区切って入力
あと、入力終了は数字以外aとかbとかcを入力してくれ

433 :デフォルトの名無しさん:2006/05/10(水) 18:57:22
>>416
両側、、、すみませんよくわからないです orz orz

434 :デフォルトの名無しさん:2006/05/10(水) 19:12:43
>416
コンパイラオプションの問題だからプログラムは変えずに比較するんじゃないか


435 :デフォルトの名無しさん:2006/05/10(水) 19:16:03
[1] 授業単元: プログラミング基礎演習
[2] 問題文(含コード&リンク): 10名の学生の成績データを読み、点数の高い順にソートして出力するプログラムを作製
[3] 環境
 [3.1] OS: Solaris
 [3.2] コンパイラ名とバージョン: gcc バージョンはわかりませんが古くないです
 [3.3] 言語: C
[4] 期限:今週の金曜(12日)0時
[5] その他の制限:
・構造体を使用すること
・簡単にデータを削除と追加する機能(連結リスト)
・文字列ライブラリは利用しないこと
・ソースファイル(prog.c)と入力ファイル(input.txt)を作る

436 :デフォルトの名無しさん:2006/05/10(水) 19:33:56
>>435
> [3.2] コンパイラ名とバージョン: gcc バージョンはわかりませんが古くないです
バージョンも分からないのに古くないとはこれ如何に

437 :デフォルトの名無しさん:2006/05/10(水) 19:45:28
何がおかしいんだ?

438 :デフォルトの名無しさん:2006/05/10(水) 21:43:25
[1] 授業単元:C言語の基礎A1
[2] 問題文(含コード&リンク): 借入金・月々の返済額・金利率/月を入力し、
借入金の返済のシミュレーションを行うプログラムを作成する。

実行例
借入金 月々の返済額 金利/月(%)を入力:1000,300,5
1月 :返済額は1050円 償還額は300円 残額は750円
2月 :返済額は787.5円 償還額は300円 残額は487.5円
3月 :返済額は511.875円 償還額は300円 残額は211.875円
4月 :返済額は222.46875円 償還額は223円 残額は0円

返済額が金利より少ないと無限ループに入るので、
簡単なエラー対策を施す事。

[3] 環境
 [3.1] OS: リナックス
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 5/9
[5] その他の制限: ifやswich文の所まで説明を受けました
数学の標準ライブラリは基本使用不可、
一部の計算に対し、「実数の小数点以下の端数を切り上げる」といったもののみ可


439 :デフォルトの名無しさん:2006/05/10(水) 22:19:13
期限すぎてないか?w

440 :デフォルトの名無しさん:2006/05/10(水) 22:31:14
ベタだけど
来年の5月じゃないのか

441 :デフォルトの名無しさん:2006/05/10(水) 22:51:03
しまった、本来の締め切り書いちゃいました
提出間に合わなかったので来週の火曜までなら、
ということで…。

442 :デフォルトの名無しさん:2006/05/11(木) 00:11:11
>>438
floorとceilも使ってみた。

#include <stdio.h>
#include <math.h>
int main(){
int debt, repay, month; double rate, rest;
printf("借入金,月々の返済額,金利/月(%%)? "); scanf("%d,%d,%lf",&debt,&repay,&rate); rate /= 100.0;
if ( debt * rate >= repay ){printf("返済額が少なすぎます。\n");return 1;}
rest = debt;month = 0;
while ( rest > 0 ){
++month; rest *= 1+rate;
if ( floor(rest) >= repay ){
printf("%d月:返済額は%g円 償還額は%d円 残額は%g円\n", month, rest, repay, rest - repay); rest -= repay;
}else{
printf("%d月:返済額は%g円 償還額は%d円 残額は0円\n", month, rest, (int)ceil(rest));rest = 0;}
}return 0;}

443 :デフォルトの名無しさん:2006/05/11(木) 01:04:15
先週ここに俺の宿題提出したK(仮名、21)キミは提出しても
0点だと言うことを覚えておきなさい。ここに書いてあるソース
コードまんま持ってくるとはいい度胸しているよな

444 :デフォルトの名無しさん:2006/05/11(木) 01:38:49
>>443
そうカリカリすんなよ
本人がソース理解できてるか確かめたらいいんじゃない?

445 :デフォルトの名無しさん:2006/05/11(木) 01:41:30
>>444
手前、俺を誰だと思ってやがる!
俺は教師だぞ!

446 :デフォルトの名無しさん:2006/05/11(木) 01:45:29
>>445
誰かとか知らんがな
教師なら歳もそう対して変わらんだろ
すぐ0点だなんだ言うのはスマートじゃないぞ

447 :デフォルトの名無しさん:2006/05/11(木) 01:48:13
じゃあ停学にしますね。カンニング扱いにできますので
そうします

448 :デフォルトの名無しさん:2006/05/11(木) 01:54:48
宿題でカンニング扱いですか。厳しい制約つけてますね

449 :デフォルトの名無しさん:2006/05/11(木) 01:57:53
>447

本物だったら超面白いのにねww

450 :デフォルトの名無しさん:2006/05/11(木) 02:04:25
[1]授業単元:プログラミング演習
[2] 問題文(含コード&リンク): 再帰関数呼び出しにより、ハノイの塔を解くプログラムを作成しなさい。
ただし、ハノイの塔の高さ、初期の位置、移動先の位置はプログラムの引数として指定できるようにすること。
なお、プログラムは ハノイの塔表示ライブラリを使用してハノイの塔の様子を表示させ、実行結果には高さが4段と6段のときの出力を提出すること。

ハノイの搭表示ライブラリを使うには,まずプログラムの先頭に
#include < hanoi.h > を加えます.
このライブラリでは以下の2つの関数が使えます.
初期化関数
hanoi_init(<搭の高さ>,<初期の搭の位置>);
円板の移動
hanoi_disc_move(<移動元の棒番号>,<移動先の棒番号>);
チェック関数
hanoi_check(<移動先の棒番号>);

実行結果(例)
スピードを調節してスタートボタンを押してください
円板[0]を0から1に移動
円板[1]を0から2に移動
円板[0]を1から2に移動
完成: 終了ボタンを押してください

[3] 環境
 [3.1] OS: Vine Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 5/13

よろしくお願いします...

451 :デフォルトの名無しさん:2006/05/11(木) 02:16:49
hanoi.hって…

452 :デフォルトの名無しさん:2006/05/11(木) 02:20:52
そういえばプレンティスホールからでてた

Computer Science Textbook C++プログラミン
 著:H・M・ダイテル+P・J・ダイテル
 訳:小鳩 隆一 
 初版:1997/9/25


以前、これのシリーズかったんだ。
章の終わりに復習問題と練習問題があったんだけど
練習問題の解答が無くて泣いたな…

453 :デフォルトの名無しさん:2006/05/11(木) 02:22:16
[1] 授業単元:情報工学実験
[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1876.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:5/11 23:59

お願いします。

454 :デフォルトの名無しさん:2006/05/11(木) 02:24:55
>>453
文字コードとか2バイト文字考慮する必要あるの
それともASCIIだけ?

455 :デフォルトの名無しさん:2006/05/11(木) 04:20:13
>>452
プログラミングに正解はない。いや、必要がない。

456 :デフォルトの名無しさん:2006/05/11(木) 04:56:44
>>450
hanoi.hがどんなんかは知らんが、解く部分だけならこう:

void solve(int f, int t, int w, int h){
  if ( h == 1 ){
    hanoi_disc_move(f, t);
  }else{
    solve(f, w, t, h - 1 );
    hanoi_disc_move(f, t);
    solve(w, t, f, h - 1 );
  }
}

fからtへh枚移動。wはf,t以外。例えばsolve(0, 2, 1, 6);

457 :デフォルトの名無しさん:2006/05/11(木) 05:24:56
>>455
言いたいことは分かるけどね。
それはプログラム組めるようになった人間に言ってくれ。

458 :デフォルトの名無しさん:2006/05/11(木) 06:33:12
正解を設定できない人に用はないよ

459 :デフォルトの名無しさん:2006/05/11(木) 06:53:03
[2]要素数が5で整数型である配列を、逆順にしたものをコピーして、
それぞれの要素の値を表示するプログラムを作成せよ

うわんわからね

460 :453:2006/05/11(木) 09:43:31
>>454

ASCIIだけだと思います。

461 :デフォルトの名無しさん:2006/05/11(木) 11:33:24
[1] 授業単元:情報科学U
[2] 問題文(含コード&リンク):3つの整数を入力し,それらを3辺とする三角形ができるならば,その面積を出力し,そうでないならば, 三角形ではありません! というメッセージを表示するプログラムを作れ
・三辺の長さが a, b, c である三角形がつくれるための条件は,
a+b > c かつ b+c > a かつ c+a > b
・三辺の長さが a, b, c である三角形の面積は,
s(s-a)(s-b)(s-c) ただし,s = (a+b+c)/2 注意 : s を求める際に小数点以下が切り捨てられないようにしよう.
・平方根を求める関数は,sqrt たとえば,sqrt(x+1) とすると,x+1 の平方根を返す.
ただし,引数(括弧の中)の式は,float 型または double 型でなければならない.
・sqrt や sin などの数学的関数を使う場合は... プログラム先頭( int main() より前のどこか)に
#include<math.h> をつける.また,コンパイルするときは(ファイル名を AB.c とする),
gcc -lm AB.c (または,gcc -lm -o AB AB.c)
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:テキストエディタはmeadow2、プログラムの実行はcygwinを使います。
 [3.3] 言語:C
[4] 期限:2006年5月12日(金)
[5] その他の制限:特にないです

よろしくお願いしますm(_)m


462 :デフォルトの名無しさん:2006/05/11(木) 12:21:42
こんな感じ。
#include<stdio.h>
#include<math.h>

int main(void){
int a,b,c,s;
scanf("%d %d %d",&a,&b,&c);
if(a+b > c && b+c > a && c+a > b){
s = a+b+c;
printf("面積%f",sqrt((float)s*(s-2*a)*(s-2*b)*(s-2*c)/16));
}else{
puts(" 三角形ではありません!");
}
return 0;
}

463 :灰色の幽霊:2006/05/11(木) 12:28:35
以前にもお世話になりまして、ここでお礼を言わせていただきます。
次の課題がでました。(もちろんわかりません)

要素数nのint型配列の全要素の値を1つずつ巡回する(例えば、
元のa[0]の値を新たなa[1]の値に、元のa[1]の値を新たなa[2]の値に、、、
を行い、元のa[n-1]の値を新たなa[0]の値とする)ような関数

rotate_array(int *x, int n)

を作成せよ。
なお、関数の第1引数としては、配列の先頭要素のアドレスを、
第2引数としては配列の要素数を与えるものとする。
この関数は、例えば、以下のような利用の仕方を想定している。

main()
{
int a[3];
a[0]=1;
a[1]=22;
a[2]=333;
printf("a[0]=%d, a[1]=%d, a[2]=%d\n", a[0], a[1], a[2]);
rotate_array(a,3);
printf("a[0]=%d, a[1]=%d, a[2]=%d\n", a[0], a[1], a[2]);
}

(実行例)
a[0]=1, a[1]=22, a[2]=333
a[0]=333, a[1]=1, a[2]=22

ソラリス9とか言うやつです。gccでコンパイルするC言語です。
17日まででよろしくお願いします。

464 :デフォルトの名無しさん:2006/05/11(木) 12:33:11
>>463
void rotate_array(int *x, int n)
{
 int last = x[n-1];
 int i;
 for(i = n - 1; i >= 1; i--)
   x[i] = x[i-1];
 x[0] = last;
}

465 :デフォルトの名無しさん:2006/05/11(木) 13:07:27
授業単元:研究室課題
問題文:以下の配列の最大和の区間を求めよ。
   3,-8,4,5,7,2,-9,1,2,4
環境
OS:Windows xp
言語:C
期限:2006年5月13日(土)
その他の制限:以下のプログラムと関数を使ってお願いします。
#define NUM 10

int main(void)
{
int array[NUM]={3,-8,4,5,7,2,-9,1,2,3,4};
int index_left,index_right;
sarch(): //最大区間を探索する関数
output(); //出力の結果
return(0);
}


466 :デフォルトの名無しさん:2006/05/11(木) 13:48:14
1

467 :デフォルトの名無しさん:2006/05/11(木) 13:51:24
音声データを読み込んで、任意のファイルを任意バイト数変換するプログラムをお願いします。
scanf エフリード などを使って作ってください。

468 :デフォルトの名無しさん:2006/05/11(木) 16:42:11
>>467
>>1も読めないのですか?

469 :デフォルトの名無しさん:2006/05/11(木) 17:36:44
>>465
前この課題の解法で凄いの思いついてた奴がいたな。
その時はO(n^2)の制限付きだったが。

470 :デフォルトの名無しさん:2006/05/11(木) 17:54:57
>>469
あのときのは「和がもっとも大きい区間」じゃなくて「和が指定された値にもっとも近い区間」だった。
>>465の問題ならO(n)で解けるはず。

471 :デフォルトの名無しさん:2006/05/11(木) 18:10:15
>>465
こんなんでいいのか?

472 :471:2006/05/11(木) 18:10:46
#include<stdio.h>
#define NUM 10
void search(int a[],int *left,int *right)
{
int i,j,max=0;
for(i=0;i<NUM;i++)
{
int sum=0;
for(j=i;j<NUM;j++)
{
sum+=a[j];
if(sum>max)
{
max=sum;*left=i;*right=j;
}
}
}
return;
}
void output(int a[],int *left,int *right)
{
printf("%d-%d\n",a[*left],a[*right]);
return;
}
int main(void)
{
int array[NUM]={3,-8,4,5,7,2,-9,1,2,4};
int index_left,index_right;
search(array,&index_left,&index_right);
output(array,&index_left,&index_right);
return 0;
}

473 :デフォルトの名無しさん:2006/05/11(木) 18:12:00
>>470
O(n)は無理だと思うぞ。

474 :デフォルトの名無しさん:2006/05/11(木) 18:48:16
>>473
O(n)の例。rightに入る値が>>472より一つ大きいのに注意。
int candidate(int a[], int size, int *left, int *right)
{
  int sum = 0;
  for(*left = 0; *left < size && a[*left] < 0; (*left)++);
  if(*left == size)
    return 0;
  for(*right = *left; *right < size && a[*right] > 0; (*right)++)
    sum += a[*right];
  return sum;
}
void search(int a[], int *left, int *right)
{
  int cl, cr, csum, i, sum = INT_MIN;
  for(i = 0; csum = candidate(a + i, NUM - i, &cl, &cr); i += cr)
    if(csum > sum)
    {
      *left = cl + i;
      *right = cr + i;
      sum = csum;
    }
  if(sum < 0) /* 正の数が一つもなかった。*/
    for(i = 0; i < NUM; i++)
      if(a[i] >= sum)
      {
        *left = i;
        *right = i + 1;
        sum = a[i];
      }
}

475 :デフォルトの名無しさん:2006/05/11(木) 19:11:47
-8とか-9だからいいけど、-1とかだったら>474ではできんよな。

476 :デフォルトの名無しさん:2006/05/11(木) 19:13:41
>>474
ちょっと興味があったんで読んでみたんだが、正数がある場合には
正数だけが続く区間を探して行って、その中の最大を
正数が無い場合には最大の要素を返すって認識であってる?

477 :デフォルトの名無しさん:2006/05/11(木) 19:15:08
>>475
確かにそうだ。指摘サンクス。

478 :474:2006/05/11(木) 19:26:27
今度はたぶん大丈夫。
void search(int a[], int *left, int *right)
{
  int psum = 0, psum_min = INT_MAX, sum = INT_MIN;
  int i, psum_min_pos;
  for(i = 0; i < NUM; i++)
  {
    psum += a[i];
    if(psum < psum_min)
    {
      psum_min = psum;
      psum_min_pos = i;
    }
    if(psum - psum_min > sum)
    {
      sum = psum - psum_min;
      *left = psum_min_pos + 1;
      *right = i + 1;
    }
  }
}

479 :478:2006/05/11(木) 19:34:32
これだと長さ0の区間を認めることになるな。
問題文には従っているということで許してくれ。

480 :デフォルトの名無しさん:2006/05/11(木) 19:39:07
1] 授業単元:プログラミングU
[2] 問題文:
文字列と整数をコマンドラインで指定し、指定された文字列から指定された整数値の文字数を先頭から取り出して表示するコマンドを作成せよ。
char *strnget(char *s1, char *s2, int n)
s1 の先頭 n 文字を s2 にコピーしてその先頭アドレスを戻り値とすること。
[3] 環境
 [3.1] OS:Linux
 [3.2] gcc
 [3.3] C
[4] 期限:06年5月15日10:20まで
[5] その他の制限:
実行部において添字演算子を用いないこと
*(p+i) の形式を用いないこと
文字列操作関数を用いないこと

自分で以下のものを作ったのですが、どこが間違っているのかよくわかりません
よければ指摘、訂正お願いします


481 :480:2006/05/11(木) 19:40:49
#include<stdio.h>
char *strnget(char *s1, char *s2, int n)
{
int i;
for(i=0;i<n;i++){
*s2=*s1;
s1++;
s2++;
}
return s2;
}
int main(int argc, char *argv[100])
{
char *s[100];
printf("%s\n",*strnget(*argv,*s,argc));
return(0);
}

482 :デフォルトの名無しさん:2006/05/11(木) 19:46:49
>>481
*strnget関数のfor文の中をもっとよく考えろ。

483 :デフォルトの名無しさん:2006/05/11(木) 19:47:23
>>478
2番目の要素が-1のときにNG。

484 :デフォルトの名無しさん:2006/05/11(木) 19:47:37
>>480
#include <stdio.h>
#include <stdlib.h>
char *strnget(char *s1, char *s2, int n)
{
  int i;
  char *s2_orig = s2;
  for(i=0;i<n;i++){
    *s2=*s1;
    s1++;
    s2++;
  }
  return s2_orig;
}
int main(int argc, char **argv)
{
  char s[100];
  int n;
  if(argc != 3)
    return(1);
  n = atoi(argv[2]);
  printf("%s\n",strnget(argv[1],s,n));
  return(0);
}

485 :デフォルトの名無しさん:2006/05/11(木) 19:53:57
str.*(regex)な形式の関数名は予約済みだったと思うんだがどうなのよ

486 :474:2006/05/11(木) 20:05:23
>>483
今度こそ。すれ汚しすまん。
void search(int a[], int *left, int *right)
{
  int psum = 0, psum_min = 0, sum_max = INT_MIN;
  int i, psum_min_pos = -1;
  for(i = 0; i < NUM; i++)
  {
    psum += a[i];
    if(psum - psum_min > sum_max)
    {
      sum_max = psum - psum_min;
      *left = psum_min_pos + 1;
      *right = i + 1;
    }
    if(psum < psum_min)
    {
      psum_min = psum;
      psum_min_pos = i;
    }
  }
}

487 :435:2006/05/11(木) 21:49:16
なぜ僕だけスルーされているのですか?
今日一日考えたけどわからねorz

488 :デフォルトの名無しさん:2006/05/11(木) 22:29:09
>なぜ僕だけスルーされているのですか?
問題がつまらないからだと思う。

489 :デフォルトの名無しさん:2006/05/11(木) 22:45:21
IOが定義されていないからじゃね?

490 :デフォルトの名無しさん:2006/05/11(木) 22:51:04
後は学生の成績データの要素が不明。
つーかinput.txtくらい自分で作れやボケッ。


491 :デフォルトの名無しさん:2006/05/11(木) 22:58:00
10人って固定ならリストに追加・削除する機能は必要ないと思うんだが

492 :デフォルトの名無しさん:2006/05/11(木) 23:45:19
テキストエディタを作成してinput.txtをいじれるようにすればいいんだな!

493 :デフォルトの名無しさん:2006/05/11(木) 23:57:10
お前頭良いなっ

494 :デフォルトの名無しさん:2006/05/12(金) 00:19:40
多次元配列で
x = { {1, 2, 3} },{ {4, 5, 6} }
y = { {1, 5},{5, 3}, {8, 1} }
の積を求めるためにはどうやってプログラムを組めばいいでしょうか?
よろしくお願いします・

495 :デフォルトの名無しさん:2006/05/12(金) 00:24:44
>>1を読まない香具師は叩かれる法則

496 :デフォルトの名無しさん:2006/05/12(金) 00:35:22
俺がinput.txtを作ったぞ!
左が名前で右が点数な
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1877.txt

497 :デフォルトの名無しさん:2006/05/12(金) 00:38:11
>494

#include <iostream>

using namespace std;

int main()
{
int x[2][3] = { {1, 2, 3} , {4, 5, 6} } ;
int y[3][2] = { {1, 5},{5, 3}, {8, 1} } ;
int sum[2][2];

sum[0][0] = x[0][0] * y[0][0] + x[0][1] * y[1][0] + x[0][2] * y[2][0] ;
sum[0][1] = x[0][0] * y[0][1] + x[0][1] * y[1][1] + x[0][2] * y[2][1] ;
sum[1][0] = x[1][0] * y[0][0] + x[1][1] * y[1][0] + x[1][2] * y[2][0] ;
sum[1][1] = x[1][0] * y[0][1] + x[1][1] * y[1][1] + x[1][2] * y[2][1] ;
}

498 :デフォルトの名無しさん:2006/05/12(金) 00:45:44
どうせならCLAPACK使えよ

499 :デフォルトの名無しさん:2006/05/12(金) 00:59:57
>>498
だったらオマイが使ってやってくれ
それで解決。

500 :デフォルトの名無しさん:2006/05/12(金) 01:19:53
>>497
ありがとうございます。助かりました!
>>495
今度からはしっかり読んでから質問します。すみません。

501 :デフォルトの名無しさん:2006/05/12(金) 02:13:39
なぜ、iostreamを…

502 :デフォルトの名無しさん:2006/05/12(金) 02:38:32
>>497がC++使ってるだけじゃ

503 :デフォルトの名無しさん:2006/05/12(金) 02:48:27
>>502
よく >>492 読んでみ。

504 :デフォルトの名無しさん:2006/05/12(金) 02:53:20
>>503
奇才現る

505 :デフォルトの名無しさん:2006/05/12(金) 03:25:11
O(n)だね

void search(int *a,int *left,int *right)
{
int i, max, now, nowLeft, nowRight;
max=now=a[*left=*right=nowLeft=nowRight=0];
for(i=1; i<NUM; ++i){
if(now>0) now+=a[nowRight=i]; else now=a[nowLeft=nowRight=i];
if(now>max){ max=now; *left=nowLeft; *right=nowRight; }
}
}

506 :435:2006/05/12(金) 07:57:27
締め切り5分前でできた
結局お前らできないってことだろ?
まあ恥ずかしがらなくていいよ
所詮2ちゃんねるだなw

507 :デフォルトの名無しさん:2006/05/12(金) 08:01:47
お、最後の発破かけか

508 :デフォルトの名無しさん:2006/05/12(金) 09:18:43
やらぬ!
恥じぬ!
省みぬ!

509 :デフォルトの名無しさん:2006/05/12(金) 11:32:48
[1] 授業単元: プログラミング通論
[2] 問題文(含コード&リンク):
非負の10進数を読み込み、2進数表記で出力する関数を 再帰を用いて 作成せよ。
(例) 7 -> 111
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限 5/16

510 :465:2006/05/12(金) 11:50:41
>>471
>>474
ありがとうございました


511 :509:2006/05/12(金) 11:52:37
事故解決しました

512 :デフォルトの名無しさん:2006/05/12(金) 12:47:23
[1] 授業単元: プログラミング
[2] 1. 標準入力またはコマンドライン引数で指定されたファイルから、
各行が2個の浮動小数点数からなる(区切りは空白のみ)テキストを入力し、
特に指定がなければ二次元ベクトルと見なしてユークリッドノルムが小さい順に整列して標準出力に出力するプログラムを書け。
ただし、以下のオプションをとることができるようにせよ。
-m ユークリッドノルムの代わりに最大値ノルムを使う。
-p p ユークリッドノルムの代わりにp乗ノルムを使う。
-r 逆順に整列する。
-S 整列しない。
-e ユークリッドノルムを使う。
-s 正順に整列する。
環境変数VECTOR_NORMがセットされている場合、その値により次のように使用するノルムを変更すること。
EUCLIDかEuclidかeuclidかのいずれかで始まる文字列。ユークリッドノルムを使う。
MAXかMaxかmaxかのいずれかで始まる文字列。 最大値ノルムを使う。
浮動小数点数として解釈できる文字列。 浮動小数点数として解釈した値をpとする。pが1以上ならばp乗ノルムを使う。そうでなければ無視する。
その他無視する。
環境変数VECTOR_SORTがセットされている場合、その値により次のように出力順を変更すること。
incまたはincreasing 正順(ノルムが小さい順)に整列する。
decまたはdecreasing 逆順(ノルムが大きい順)に整列する。
no 整列しない。
その他 無視する。
なお、コマンドライン引数を環境変数より優先すること。
問題文(含コード&リンク):

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限 5/16


513 :デフォルトの名無しさん:2006/05/12(金) 13:38:50
[1] 授業単元: 計算機通論
[2] 問題文(含コード&リンク):
以下のif文を、同じ働きをするif文や条件式を使わない方法で書き直しなさい。
(switch文や'?'を用いないでお願いします)

if(buf[i] < 0) count++;

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限 5月15日

514 :デフォルトの名無しさん:2006/05/12(金) 13:42:51
>>513
count += buf[i] < 0;

515 :デフォルトの名無しさん:2006/05/12(金) 13:52:06
>>514
buf[i] < 0
の値って処理系依存じゃね?

516 :デフォルトの名無しさん:2006/05/12(金) 13:53:08
>>515
いいえ。

517 :デフォルトの名無しさん:2006/05/12(金) 13:54:22
そうなの?禿本のどっかに書いてあった気がするんだが。

518 :デフォルトの名無しさん:2006/05/12(金) 13:54:23
>>513
buf[i] < 0 && count++;

519 :デフォルトの名無しさん:2006/05/12(金) 13:58:23
buf[i] < 0って条件式?

520 :デフォルトの名無しさん:2006/05/12(金) 13:59:36
>517は>515へのレスな。確か真は1になるはず。

521 :まなみ:2006/05/12(金) 14:03:55
はじめまして

C言語の二次方程式のプログラムが
わからなぃですぅ(><)

だれかぉしぇてくださぃ

522 :デフォルトの名無しさん:2006/05/12(金) 14:05:30
>>521
>1
まぁ、このスレくらい検索してみるこった。

523 :デフォルトの名無しさん:2006/05/12(金) 14:06:54
えと、「0ならば偽、非0ならば真だが、関係演算子の返す値は必ず0か1」という規格のようですね。

524 :デフォルトの名無しさん:2006/05/12(金) 14:10:23
問題は、0.5が偽だってことだな。

525 :まなみ:2006/05/12(金) 14:11:51
できなってこと?

526 :デフォルトの名無しさん:2006/05/12(金) 14:15:15
ttp://www.google.co.jp/search?q=%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%93%E3%81%A8

527 :デフォルトの名無しさん:2006/05/12(金) 14:18:59
日本語でok

528 :デフォルトの名無しさん:2006/05/12(金) 14:20:35
まずは日本語を学んでください


529 :まなみ(♂):2006/05/12(金) 14:23:40
お騒がせして申し訳ありませんでした

530 :デフォルトの名無しさん:2006/05/12(金) 14:39:45
>>513
count += buf[i]>> CHAR_BIT * sizeof(buf[i]) - 1 & 1

531 :デフォルトの名無しさん:2006/05/12(金) 14:43:52
>>530
CHAR_BIT * sizeof(buf[i])がbuf[i]のビット幅である保証はない。
例えばCHAR_BITが9でbuf[i]のビット幅が32かもしれん。

532 :デフォルトの名無しさん:2006/05/12(金) 14:45:29
負数の右シフトは実装依存です。

533 :デフォルトの名無しさん:2006/05/12(金) 14:56:28
count += ((unsigned long)buf[i] & ~(~0ul >> 1)) / ~(~0ul >> 1);

534 :デフォルトの名無しさん:2006/05/12(金) 15:07:44
実装依存とか言うやつはどこに目つけとんの?
Linux上のgccと実装は明らかなわけやから、できるか、できんか、どっちかやろ。

535 :デフォルトの名無しさん:2006/05/12(金) 15:15:54
>>534
使われる実装が明らかでもそれに依存して良いとは限らないだろ。
特にこの場合は宿題なんだから処理系とは独立して正しいコードが求められている可能性は十分にある。

536 :デフォルトの名無しさん:2006/05/12(金) 15:32:38
               ;;   :::::::゙゙';;,                    私
              ,;;    ::::::::"゙;;,,,                  の
              ,;;      ''''"" ゙゙゙'''';;,,,               こ
             ,;; ,,       :::::::::::::::::'';;,,             と
.             ,;;,;゙′        :::::::::::::::::゙';;,゙゙゙'''''''';;;;;,,,       好
             ,;;゙              ::::::::::..   :::::::::゙゙゙"'';;;,,   き
               ;; ー-、          :::::::::     :::::::,,;;::'''゙   ?
            ';;         -ー-、   ::::::::    ,,;;'"
             ;;  ″              :::::::;;  ,,;;"゙
               ;;,    iー┐   ''"* ::::::::::,;;-'゙゙
              ゙';;,,  ー '     :::::::::::,;;''
                  ゙゙'';,,      :::::::::::;;;;::'゙"
                 ';     :::::::::::':;,
                 ';       :::::::::':;,   ;`;,
                 ';        :::::::':;,丿 ;'


537 :513:2006/05/12(金) 16:07:17
たくさんのご回答本当にありがとうございます!

シフト演算の説明の後に書いてある問題で、
>>533の方みたいにunsignedを使った方法で簡易なものがあればお願いします
~(~0ul >> 1)) は見たことないので・・・

538 :デフォルトの名無しさん:2006/05/12(金) 16:18:09
>>537
0ulは(unsigned long)0と書き換えても良い。

539 :513:2006/05/12(金) 16:19:15
どうもありがとうございます(o*。_。)oペコッ

540 :デフォルトの名無しさん:2006/05/12(金) 16:26:11
buf[i]がlong longでびっくり

541 :デフォルトの名無しさん:2006/05/12(金) 16:39:50
じつはlong doubl.e

542 :デフォルトの名無しさん:2006/05/12(金) 18:20:44
[1] 授業単元: 情報処理
[2] 問題文:キーボードから月を数字で入力し、英語名称とその短縮形を出力するプログラムを作り実行しなさい。
ただし、0から12までを除いた数字入力に対してはエラーと出力し、0を入力すればプログラムを終了するようにしなさい。
また、繰り返しにはwhileループ、多分岐選択にはswitchを使用すること。
入出力例)
please input 0 if you wish to finish.
please input month:1(注:数字で月を入力)
January Jan.
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限 5/17 どうかよろしくお願いします(ノД`)

543 :デフォルトの名無しさん:2006/05/12(金) 18:56:44
書くのが面倒くさいから来たのかね?ん?

544 :デフォルトの名無しさん:2006/05/12(金) 19:13:38
>>542
#include <stdio.h>
#include <ctype.h>

int main(void)
{
char achInput[4];/* 入力データ */

while (1)
{
fgets(achInput, 4, stdin);
if ( !isdigit(achInput[0]) || !isdigit(achInput[1]) && (achInput[1] != '\n') || achInput[2] != '\n' && achInput[2] != '\0' ) break; /* 非数は終了でいいだろ? */

switch (achInput[0])
{
case '1':
switch (achInput[1])
{
case '\n':
puts("January, Jan");
break;

case '0':
puts("October, Oct");
break;

case '1':
puts("November, Nov");
break;

545 :デフォルトの名無しさん:2006/05/12(金) 19:14:35
case '2':
puts("December, Dec");
break;

default:
puts("Error!");
break;
}
break;

case '2':
puts("Febrary, Feb");
break;

case '3':
puts("MandoX A");
break;

case '4':
puts("booooooon");
break;

case '5':
puts("ぬるぽ");
break;

case '6':
puts("がっ");
break;

546 :デフォルトの名無しさん:2006/05/12(金) 19:15:48
case '7':
puts("Neeeeeeeeeeeeeeeeeeet");
break;

case '8':
puts("nil");
break;

case '9':
puts("NULL");
break;

case '0':
return 0;

default:
puts("Error!");
break;
}
}

return 0;
}

面倒(とゆうかやり方忘れた)だからバッファのフラッシュはやってない
だから3文字以上入力された場合の動作は未定義

547 :デフォルトの名無しさん:2006/05/12(金) 20:03:14
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
最大40個の構造体(名前、身長、体重を要素として含む)を用意し、40個以内でデータ
の入出力を行い、それらの一覧を表示するプログラム
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限 5/15

よろしくお願いします m(__)m

548 :デフォルトの名無しさん:2006/05/12(金) 20:11:36
>>542
#include <stdio.h>
int main()
{
    char buff[1024];
    int mon;
    while (1) {
        printf("please input 0 if you wish to finish.\n"
              "please input month: ");
        if(fgets(buff, sizeof(buff), stdin) == 0)
            return 0;
        if (sscanf(buff, "%d", &mon) < 1 || mon < 0 || mon > 12) {
            fprintf(stderr, "エラー\n");
            continue;
        }
        switch (mon) {
        case 0:  return 0;
        case 1:  printf("January, Jan\n");    break;
        case 2:  printf("February, Feb\n");  break;
        case 3:  printf("March, Mar\n");    break;
        case 4:  printf("April, Apr\n");    break;
        case 5:  printf("May, May\n");      break;
        case 6:  printf("June, Jun\n");      break;
        case 7:  printf("July, Jul\n");      break;
        case 8:  printf("August, Aug\n");    break;
        case 9:  printf("September, Sep\n"); break;
        case 10: printf("October, Oct\n");  break;
        case 11: printf("November, Nov\n");  break;
        case 12: printf("December, Dec\n");  break;
        }
    }
}

549 :デフォルトの名無しさん:2006/05/12(金) 20:21:42
>>547
最低でも構造体(の基になるデータ)は自分で用意しろ
用意したからといってするとは限らないが、それすらないなら高確率で誰もやってくれない

550 :デフォルトの名無しさん:2006/05/12(金) 20:28:18
おおかた>>435だろ内容が同じ

551 :デフォルトの名無しさん:2006/05/12(金) 20:58:05
データは自分で用意汁って>>1に書いてないよね?
今気づいたけど

552 :デフォルトの名無しさん:2006/05/12(金) 22:04:55
>>551
データを用意しているか以前に、問題全文載せてなおデータの仕様も不明では話にならない。
逆に仕様が明らかならデータは(あったほうがテストしやすいとはいえ)なくても困らない。

553 :デフォルトの名無しさん:2006/05/12(金) 22:06:13
問題がつまらんときは努力を見せろってことッスな

554 :デフォルトの名無しさん:2006/05/12(金) 22:36:41
>>512
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1890.c

555 :デフォルトの名無しさん:2006/05/12(金) 23:46:40
>>547
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define    MAX_ITEMS    (40)
#define    LBUF    (1024)

struct person {
    char *name;     
    double height;  /* 身長 */
    double weight;  /* 体重 */
};

int input_person(struct person *psn)
{
    char buf[LBUF];
    char name[LBUF];
    int s;
   
    printf("名前は? (`-` で入力終了) ");
    fgets(buf, sizeof(buf), stdin);
    sscanf(buf, " %[^\n] \n", name);
    if(strcmp(name, "-") == 0)
        return 0;
    else
        psn->name = strdup(name);

    do {
        printf("身長は? ");
        fgets(buf, sizeof(buf), stdin);
        s = sscanf(buf, " %lf", &psn->height);

556 :555:2006/05/12(金) 23:47:41
    } while(s != 1);
   
    do {
        printf("体重は? ");
        fgets(buf, sizeof(buf), stdin);
        s = sscanf(buf, " %lf", &psn->weight);
    } while(s != 1);
    return 1;
}

int main()
{
    struct person person_list[MAX_ITEMS];
    int listlen;
    int i;
    int s;
   
    for(listlen = 0; listlen < MAX_ITEMS; listlen ++)
    {
        s = input_person(&person_list[listlen]);
        if(s == 0)
            break;
               
        if(s == -1)
            perror("Error: ");
    }
    for(i=0; i<listlen; i++)
        printf("名前:%s 身長:%.1lfm 体重%.1lfkg\n", person_list[i].name,
            person_list[i].height, person_list[i].weight);

    return 0;
}

557 :デフォルトの名無しさん:2006/05/13(土) 01:16:50
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
1次元配列の要素の中で最大の物を表示。
(注意:a[0〜n]の要素の中でたとえば5が最大であるとき、a[0]とa[1]が5であるとすれば
5を二回表示させよ。その際、配列を入れ替えたりしてはならない)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限5/17
[5] その他の制限:
上のプログラムを関数にしてメインを作るのですが
メインは完成したものの関数が思いつきません・・・


558 :デフォルトの名無しさん:2006/05/13(土) 01:18:57
[1] 授業単元: 応用プログラミング演習
[2] 問題文(含コード&リンク):口頭で説明されたので、細かくはわからないんですが、音声データを読み込んで、任意のファイルの任意バイト数を変換するプログラムをお願いします。
初心者で何もわからないんですが、エフオープン・scanf・エフリード・rb・バイナリなどを使うと言っていました。
[3] 環境  [3.1] OS: Windows  [3.2] コンパイラ名とバージョン:  [3.3] 言語: C
[4] 期限: 2006年 5月14日 22:00まで
[5] その他の制限: なし

完璧じゃなくてもいいんでお願いします。


559 :デフォルトの名無しさん:2006/05/13(土) 01:31:54
>>557
void aaa(int array[],int count)
{
int i,max=0;
for (i=0;i<count;i++){
if (array[i]>max){
max=array[i];
}
}
for (i=0;i<count;i++){
if (array[i]==max){
printf("%d\n",array[i]);
}
}
return;
}

560 :デフォルトの名無しさん:2006/05/13(土) 01:34:26
>>557
効率はあれかもしれないけど、まず最大値を求めて、その後配列の中に最大値がいくつあるか数えるといいかも

>>558
その説明でどんなプログラムか分かる人間がいるのだろうか。
せめてもうちょっと自分なりにこんな動作するんじゃないかなーとか書いてくれ。

561 :デフォルトの名無しさん:2006/05/13(土) 02:03:09
>>558
もう一回聞いて来た方がよいと思われ
もし本当にそれだけしか説明がないんなら出題者が何らかの病気

562 :デフォルトの名無しさん:2006/05/13(土) 02:19:40
件名「あんたの無能さについて」

563 :デフォルトの名無しさん:2006/05/13(土) 03:40:23
お前ら本当に凄いな・・・
俺にはそんなメールする勇気ないぞ

564 :デフォルトの名無しさん:2006/05/13(土) 03:47:19
何かプリントとか貰ってないの?
普通「口頭で説明」だけって事は無いだろう。

565 :デフォルトの名無しさん:2006/05/13(土) 08:32:31
話の流れが見えないから変換って言われてもね…

566 :デフォルトの名無しさん:2006/05/13(土) 08:43:52
[1] 授業単元: プログラミング演習B
[2] 問題文(含コード&リンク): 
Unixのxeyesの様に、目玉もしくは矢印が、マウスカーソルのある方向を示すプログラムを書け。
なお、フォーカスが他のアプリケーションにあるときも、方向を指し続けるようにすること。
[3] 環境 
 [3.1] OS: Windows 
 [3.2] C++Builder 6 
 [3.3] C++
[4] 期限: 2006/6/12 
[5] その他の制限: 特になし 


567 :デフォルトの名無しさん:2006/05/13(土) 09:06:45
>>557
二度数えしない方法.

#include <stdio.h>
int main() {
  int a[] = {1,4,3,2,4,2,3,4};
  int i, max, count, n = 8;
  max = -10000; /* 十分小さな数 */
  count = 0;
  for (i = 0; i < n; ++i) {
    if (max < a[i]) { max = a[i]; count = 0; }
    if (max == a[i]) { ++count; }
  }
  for (i = 0; i < count; ++i)
    printf("%d ", max);
}

568 :デフォルトの名無しさん:2006/05/13(土) 10:18:35
[1] 授業単元: 演習
[2] 問題文(含コード&リンク):
1から100までの整数に関し、以下の仕様にしたがって数値を表示するプログラムを作成せよ。
@3かつ2で割り切れる数値を小さいものから順に表示する
A上記@の表示を行った後、3または2で割り切れ、かつ10以上50未満の数値を大きなものから順に表示する
B上記Aで表示した数値の総和も表示する
[3] 環境
 [3.1] OS: linux
 [3.2] gcc
[4] 期限: 2006/6/18
[5] その他の制限: 特にありません。お願いします

569 :デフォルトの名無しさん:2006/05/13(土) 10:26:39
#include <stdio.h>
int main() {
  int i, sum;
  /* (1) */
  for (i = 1; i <= 100; ++i) 
    if (i % 2 == 0 && i % 3 == 0) 
      printf("%d ", i);
  printf("\n");
  /* (2) */
  for (i = 49; i >= 10; --i) 
    if (i % 2 == 0 || i % 3 == 0) 
      printf("%d ", i);
  printf("\n");
  /* (3) */
  sum = 0;
  for (i = 49; i >= 10; --i) 
    if (i % 2 == 0 || i % 3 == 0) 
      sum += i;
  printf("%d\n", sum);
}


570 :デフォルトの名無しさん:2006/05/13(土) 10:29:43
[1] 授業単元: ゼミで出た話題
[2] 問題文:

配列 a = [ a[0], a[1], ..., a[n-1] ] が与えられる.

 (1) a の連続する部分の和の最大値を求めよ.
 例: a = [-3,1,2,-1,3,-5] だった場合 [1,2,-1,3] の部分を取って,答えは 5.
 注: 「何も取らない」 で 0 にすることは認めない.
   つまり a = [-3,-2,-1,-2,-3] だった場合 [-1] を取って -1.

 (2) a の二つの連続する部分の和の合計の最大値を求めよ.
 例: a = [-3,1,2,-1,3,-5] だった場合 [1,2] と [3] を取って答えは 6.
 注: 二つの部分が分離している必要はない.
   つまり a = [-5,1,2,3,-5] だった場合 [1,2] と [3] を二つの部分と見て 6.

 (3) 三つ以上の連続する部分の和の最大値を求める効率のよい方法はあるだろうか.

[3] 環境: C/C++ どちらでも.
[4] 期限: 5/21 まで.

571 :デフォルトの名無しさん:2006/05/13(土) 11:12:39
>>570
長さゼロの列を認めないのはすごく気持ち悪いんだが。
例えば(2)で、a = [-1, 8, -3]のとき答えは7でいいのか?

572 :570:2006/05/13(土) 11:25:17
>>571
そうなります.

573 :デフォルトの名無しさん:2006/05/13(土) 11:28:42
>>570
すぐ上くらい見ろ。>>505とか。

574 :デフォルトの名無しさん:2006/05/13(土) 11:32:16
>>573
それを踏まえた出題だと思うが。

575 :570:2006/05/13(土) 11:36:18
>>573-574
すんません,単純に見てませんでした orz...

(2), (3) だけでお願いします.

# 実際にゼミで問題になったのは (3) ですが,説明には (1), (2) が
# あったほうがよいと思うので,(1), (2) を列記しました.

576 :デフォルトの名無しさん:2006/05/13(土) 13:41:21
誰か、>>570の(2)の意味を教えてくれないかorz
単純に自分の頭が弱いんだと思うんだが、
例を見ても規則性が分からぬ。


577 :576:2006/05/13(土) 13:51:28
スマソ、自己解決しますたorz

578 :デフォルトの名無しさん:2006/05/13(土) 13:51:53
#include<stdio.h>
struct seiseki {
int code; /*学籍番号*/
double eng; /*英語の点数*/
double math; /*数学の点数*/
char name[50]; /*名前*/
};
/*平均計算関数のプロトタイプ宣言*/
void CalcAverage(struct seiseki* classA,
double* Average1, double* Average2);
int main(void)
{
int i;
double AverageEng = 0.0; /*英語の平均値*/
double AverageMath = 0.0; /*数学の平均値*/
/*構造体の初期化*/
struct seiseki classA[5] = {
{1, 59.4, 84.3, "Aomori"},{2, 43.8, 94.2, "Itamoto"},{3, 74.3, 64.5, "Kimura"},{4, 57.3, 73.4, "Satou"},{10, 62.6, 55.9, "Sugiyama"}
};
/*平均の計算(関数に情報を渡している)*/
CalcAverage(☆☆☆); /*結果をアドレス渡しにしていることに注意*/
/*結果の表示*/
printf("Average(English):%f, Average(Math):%f\n", AverageEng, AverageMath);
return 0;
}
void CalcAverage(struct seiseki* classA, double* Average1, double* Average2)
{
☆☆☆
}
5人の英語の課題の点数と数学の点数の平均をそれぞれ求めるプログラムです。☆☆☆のところを補充して、正しいプログラムをお願いします。


579 :デフォルトの名無しさん:2006/05/13(土) 14:02:01
>>578
>>1

580 :デフォルトの名無しさん:2006/05/13(土) 14:11:31
>>578
テンプレ位読もうな。
あと、この仕様だと人数決めうちにしかできないが、課題だからそうなってんのかな。

呼び出し部は CalcAverage(classA, &AverageEng, &AverageMath);

void CalcAverage(struct seiseki* classA, double* Average1, double* Average2)
{
int i;
double Ave1 = 0, Ave2 = 0;

for( i=0; i<5; i++ ) {
Ave1 += classA[i].eng;
Ave2 += classA[i].math;
}

*Average1 = Ave1 / 5;
*Average2 = Ave2 / 5;
}

581 :デフォルトの名無しさん:2006/05/13(土) 14:16:46
>>578
関係ないけど、出題者の命名規則がアレだな。


582 :デフォルトの名無しさん:2006/05/13(土) 14:18:45
>>580
ありがとうございました。

583 :デフォルトの名無しさん:2006/05/13(土) 15:08:25
ゼミの話題ってたまに出るけどさぁ、
PGのゼミってあるわけ?

584 :デフォルトの名無しさん:2006/05/13(土) 16:12:02
>>570
一応できた。長さnの入力をm個に分けることがO(mn)の時間とO(m)の空間でできるはず。
>>505のコードをベースにした。

# include <algorithm>
# include <vector>

int solve(int *a, int size, int m)
{
  std::vector<int> init(m, 0);
  std::vector<int> last_max(m, 0);
  std::vector<int> last_now(m, 0);
  for(int i = 0; i < size; i++) {
    if(i < m) {
      init[i] = i > 0 ? init[i-1] + last_max[i-1]: 0;
      last_max[i] = a[i];
      last_now[i] = a[i];
    }
    for(int k = 0; k < m && k < i; k++) {
      last_now[k] = std::max(last_now[k], 0) + a[i];
      last_max[k] = std::max(last_now[k], last_max[k]);
    }
    for(int k = 0; k < m - 1 && k < i; k++) {
      int diff = init[k] + last_max[k] - init[k+1];
      last_max[k+1] -= diff;
      last_now[k+1] -= diff;
      init[k+1] = init[k] + last_max[k];
    }
  }
  return init[m-1] + last_max[m-1];
}

585 :デフォルトの名無しさん:2006/05/13(土) 16:14:22
>>583
研究するときデータ採取とかにプログラムを書く必要がある場合は、
課題として出されたりするんじゃないの?
しらんけど。

586 :558:2006/05/13(土) 17:11:20
音声データをコマンドプロンプトで読み込むと、16進数の文字列で
表されて、そのファイルを関数エフオープンで任意のファイルを読み
込んで、スキャンエフで任意バイト数(何バイト目〜何バイト目を)
の指定です。

プリントでの問題文がないので、説明の仕様がありません。

587 :デフォルトの名無しさん:2006/05/13(土) 17:39:53
エフオープンって何だよ。エーオープンなら知っているが。

588 :デフォルトの名無しさん:2006/05/13(土) 17:41:08
>>587
fopen

589 :558:2006/05/13(土) 17:41:52
すみません。エフ商会の間違いでした。

590 :デフォルトの名無しさん:2006/05/13(土) 17:43:43
エフ商会??!!
ますますわかんねぇ!

591 :デフォルトの名無しさん:2006/05/13(土) 18:03:56
>>587 じゃあもっと勉強しろ。

592 :558:2006/05/13(土) 18:10:31
なんでもいいので、早くやってください

593 :デフォルトの名無しさん:2006/05/13(土) 18:45:03
>>592
屏風から虎を追い出してください。さすれば捕まえて差し上げましょう。

594 :デフォルトの名無しさん:2006/05/13(土) 19:22:27
>そのファイルを関数エフオープンで任意のファイルを読み込んで

m9( ゚д゚ )

595 :デフォルトの名無しさん:2006/05/13(土) 19:25:24
変換ってなにやるんだYO

596 :デフォルトの名無しさん:2006/05/13(土) 19:27:47
    o-o、
    ('A`)  メガネメガネ
    ノ ノ)_

597 :デフォルトの名無しさん:2006/05/13(土) 19:32:40
ん?変換の具体的内容って書いてあったか?

598 :デフォルトの名無しさん:2006/05/13(土) 19:34:37
へんか?

599 :デフォルトの名無しさん:2006/05/13(土) 19:37:46
>590
株式会社エフ商会のことじゃないのかい?

http://www.f-shokai.co.jp/

600 :デフォルトの名無しさん:2006/05/13(土) 19:39:25
>>599
へー、知らなかったよ

601 :デフォルトの名無しさん:2006/05/13(土) 20:07:23
>>558 完璧じゃないけどな
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
FILE *fp;
int n;
char *p;
if(argc < 3)return 1;
fp = fopen(argv[1], "rb");
if(fp == NULL)return 1;
n = atoi(argv[2]) + 1;
p = (char*)malloc(sizeof(char) * n);
if(p == NULL)return 1;
fread( p, sizeof(char), n, fp);

free(p);
fclose(fp);
return 0;
}
コマンドライン引数は 対象のファイル バイト数 な
ところで変換ってn(ry

602 :デフォルトの名無しさん:2006/05/13(土) 21:54:27
フーリエ変換でもするんだろうか。
どっちにしても>>558はちゃんと授業出てたのか?
もしちゃんと出ててこの状況なら、出題者に質問或いは抗議してもいいんじゃまいか。

603 :デフォルトの名無しさん:2006/05/13(土) 21:56:43
>>558
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1892.txt
実行例
hoge.exe voice.wav



604 :billy:2006/05/13(土) 23:14:42
実行例
% cat source
This,is,source.
end.
% gcc -o filebreak kadai.c
% ./filebreak source
-- Line 1 --
Field 1: This
Field 2: is
Field 3: source.
-- Line 2 --
Field 1: end.


605 :デフォルトの名無しさん:2006/05/13(土) 23:15:21
[1] 授業単元: まだ初歩なのでどういえばいいかわかりません。
[2] 問題文(含コード&リンク):1、テキストの幅を調べる 2、1ではタブも一文字とされるが
水平タブを考慮してテキストの幅を正しく調べられるように改良せよ
[3] 環境  mac UNIX
[4] 期限: 2006年 5月17

自分で考えた1については
#include <stdio.h>

int main(){
int c;
   int width, maxwidth = 0;
while((c == getchar()) != EOF){
if(c == '\n){
if(width > maxwidth)
maxwidth = width;
width = 0;
}
else width++;
}
printf(``%d\n``, maxwidth);
return 0 ; 

なのです。
どう改良すればいいのでしょうか?
そもそもこのプログラムが合っているかの判定もお願いします。
ただこのプログラムsample.c
に対してgcc sample.c ./a.out
としたあと文字入力して、その文字入力を終了したことを表す操作がわからず
できているかの判定ができませんでした・・
そのことについてもできればよろしくお願いします


606 :デフォルトの名無しさん:2006/05/13(土) 23:59:31
>>605
いろいろおかしい
c==getchar()だとcとgetchar()の戻り値を比較してる
widthが初期化されずに比較されたり、加算されたり、代入したりしてる
あと、全角混じってね?printfとreturnトコ

607 :デフォルトの名無しさん:2006/05/14(日) 00:05:04
>>605
キーボードで [CTRL] + D 押すと入力終了になると思われ。

プログラムのほうは、606 が指摘してる点以外では、
1. ``%d\n`` ではなく "%d\n"
2. c == '\n では ' が閉じてない
3. 改行なしで入力が終わったらどうなるか考えてみよう。

608 :デフォルトの名無しさん:2006/05/14(日) 00:15:45
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
@、好きな整数を入力
A、@に2をかける
B、Aに100をたす
C、Bに20をかける
D、Cから400ひく
E、Dを40でわる
F、Eの商を40で割ったあまりを求める
G、Fを表示する
[3] 環境
 [3.1] OS:Windowsxp)
 [3.2] コンパイラ名とバージョン:Win32(よくわかりません)
 [3.3] 言語:C++
[4] 期限:月曜までにお願いします

609 :デフォルトの名無しさん:2006/05/14(日) 00:18:27
>>608
ごめん、1〜7のどこが分からないんだ?
まさしく本を見ろのレベルなんだが。

610 :デフォルトの名無しさん:2006/05/14(日) 00:21:24
>>608
#include <stdio.h>

int main(void)
{
int num;
scanf("%d", &num);
num*=2;
num+=100;
num*=20;
num-=400;
num/=40;
num%=40;
printf("%d\n", num);
}

611 :デフォルトの名無しさん:2006/05/14(日) 00:22:29
return0;ほしかった

612 :デフォルトの名無しさん:2006/05/14(日) 00:28:20
>>609
学校で終わらなかったから家でやろうとしたらなんか学校のと違って実行できなかったんで、一応確認の為だったんです
>>610
サンクスnumじゃなくてもいいんだよね

613 :デフォルトの名無しさん:2006/05/14(日) 00:29:54
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): テキストファイル(gpl.txt)中に出現する全ての単語とその出現回数をリスト構造で記憶するプログラムを作成し、出現回数でソートを行いなさい。プログラムの出力結果は,出現回数が多い単語の上位5個とその出現回数,
さらに単語"source"の出現回数とその出現順位(多い順で数える、同じ数の単語がある場合の順位計算に注意する)を表示すること.ただし,出現する単語の数は未定とし,単語と出現回数を双方向リスト構造で記憶すること.
(gpl.txt)→http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1893.txt
以下の関数を作成すること(これら以外の関数も作成して良い).(注意:関数の説明を十分にすること.)
create_node : 新規ノードを作成する.
add_node : ノードをリストの先頭に追加する.
search_node : ノードに保存された単語を検索する.
delete_node : ノードを削除する.
insert_node : ノードを指定した場所に挿入する.
swap_node : 2つのノードを指定して,それぞれの位置を交換する.
正解
1位 : the 194個
2位 : to 108個
3位 : of 104個
4位 : or 77個
5位 : you 76個
source : 16個, 33位
注意:
パーザはparse関数を使用すること。
リスト構造で構造体の中身を入れ替えるために、構造体のコピーを使用してはいけない。必ず、ポインタの変更による入れ替えを行うこと。
単語の上位5位を表示する時は,リストの先頭5つのノードだけを見るようにすること.リスト全体を検索してはいけない.
単語の順位計算では、同じ出現回数の単語を同じ順位として扱うプログラムを記述すること。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限 5/18

宜しくお願いします m(__)m


614 :デフォルトの名無しさん:2006/05/14(日) 00:37:02
>>613
>パーザはparse関数を使用すること。
こんな関数、少なくとも標準ライブラリでは見たことも聞いたこともない
別のライブラリを使うならそれが何なのか、講師から配られたorこの課題以前に
作成したならそれをうpしろ

615 :605:2006/05/14(日) 00:40:10
すみません 全角などは、UNIX上では問題なくかけていると思います。
607サンの指摘された1、2も問題ないです
本当にすみません 
606サンの指摘ですが while((c = getchar()) != EOF){・・・
にしても同じでしょうか?
このプログラムに似ているものがプリントにあって、真似ているつもりなのですが・・
607サン、入力後コントロールDを押しても^dと表示されるだけで
終了しませんでした もう一度学校いきしだい試してみます。


616 :デフォルトの名無しさん:2006/05/14(日) 00:47:52
>>615
そのwhile条件式(継続式かなんかって言い方もあったかな)はEOFが入力されるまで
標準入力から読み込み続ける時の常道だから問題ない
最初のは両方とも比較になってたからダメ
代入と比較は表記上は似てるが全くの別物だから気をつけろ

Ctrl+DはEOFだが、WindowsだとCtrl+Zだったか別のに割り当てられてた気もする

617 :デフォルトの名無しさん:2006/05/14(日) 00:50:46
[1] 授業単元:C言語
[2] 問題文(含コード&リンク): 文字列str内の全ての数字文字を削除
する関数 void del_digit(char str[]){/* */}を作成せよ
[3] 環境 mac
[4] 期限:月曜までにお願いします

どこまでの知識をもっているかということを答えられないレベルなのですが、
明快 C言語 入門編 という参考書を片手にやっています
よろしくおねがいします。



618 :570:2006/05/14(日) 00:53:37
>>583
自主ゼミです.アルゴリズム論ということでやってます.
各人が面白そうな問題を持ち寄って適当に喋ってるだけですが.


>>584
すごい! O(mn) で行けるんですか.驚きました.
アルゴリズムを理解できてないので,じっくり考えさせていただきます.


ありがとうございました.


619 :デフォルトの名無しさん:2006/05/14(日) 00:53:37
>>617
つスレ内検索

620 :613:2006/05/14(日) 00:55:10
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1894.txt

621 :605:2006/05/14(日) 00:55:28
>>616 ありがとうございます。同じようなものだと思っていました・・
./a.out のあと文字例えば「qesysuqaiq6819]を入力してenter押してCtrl+D
したのですがなにも起こらなかったようなきがします 
もう一度ためしてみます。
また最初の質問なのですが、「水平タブを考慮」した場合
どのように改良すればいいかがヒントもないので検討がつきませんので
出来ればよろしくお願いします

622 :デフォルトの名無しさん:2006/05/14(日) 00:57:55
>>621
getchar()は(俺がぼけてなければ)標準入力から読み込む
だからその手順(./a.out hoge[Enter][Ctrl-D])なら
何も表示せずプロンプトに戻るのが正常
./a.out [Enter] hoge[Ctrl-D]が正しい使い方

623 :デフォルトの名無しさん:2006/05/14(日) 01:00:34
>>620
既にEOFに達してるFILE*渡されたときに変なことになりそうな気もするし
そもそもBOF確実に起こしかねないってどうよと言いたくなるな

624 :605:2006/05/14(日) 01:04:57
>>622 すみません hogeとは何を指していますか?

625 :デフォルトの名無しさん:2006/05/14(日) 01:07:05
任意の名前

626 :デフォルトの名無しさん:2006/05/14(日) 01:13:08
楽しそうな話だね・・・僕も混ぜてくれるかな?・・(大蛇丸風)

627 :613:2006/05/14(日) 01:21:34
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1895.txt
すみません。こちらでお願いしますm(__)m

628 :デフォルトの名無しさん:2006/05/14(日) 02:33:57
>613

judge_countって配列は何をカウントするの?
このmain関数は適宜変更していいの?


629 :デフォルトの名無しさん:2006/05/14(日) 02:58:27
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):英文テキストから単語を抜き出す関数PickWordを作成し、
  関数PickWordを用いて英文テキストから単語を抜き出して単語のリストを出力するプログラムWordListを作成せよ。
  英文テキスト(文字列)はキーボードから読み込む。テキストの長さは不定(最大255文字)。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:VC
 [3.3] 言語:C
[4] 期限:5月15日まで
よろしくお願いします

630 :629:2006/05/14(日) 03:36:55
慌てず急いで正確にな

631 :629:2006/05/14(日) 03:40:59
これはいい騙りですね

632 :629 ◆zZtDbr6Gfc :2006/05/14(日) 03:46:10
トリップ付け忘れてたorz

633 :629 ◆manko/yek. :2006/05/14(日) 08:19:08
勝手に人の名を騙らないでください。
>>630-632は自分ではありません。

とにかく今回は時間がないので、どんなのでもいいので、早めにやってください。
おながいします。

634 :613:2006/05/14(日) 08:24:49
>>628
judge_countは実行の際に
% ./003 gpl.txt gnu the of license program
と指定した単語を数える関数ですm(__)m

635 :629 ◆manko/yek. :2006/05/14(日) 09:02:15
すみません、自己解決しました

636 :billy:2006/05/14(日) 09:24:54
実行例
% cat source
This,is,source.
end.
% gcc -o filebreak kadai.c
% ./filebreak source
-- Line 1 --
Field 1: This
Field 2: is
Field 3: source.
-- Line 2 --
Field 1: end.
となるようにしたい

637 :デフォルトの名無しさん:2006/05/14(日) 10:10:08
ダーツに興味ある人はいませんか?
初心者、上級者一切問いません。ダーツを愛する方ならどなたでも結構です。

実はあるダーツ店のマスターが客が来なくてとても困っているようです。


  ↓↓↓ 詳細はこちら ↓↓↓
http://sports9.2ch.net/test/read.cgi/bullseye/1111230059/431-452


できればこのマスターに励ましの言葉をお願いします。
また、もしこの店の近くにお住まいの方はお店の方にも行ってあげてください。
困ったときはお互い様です。ダーツを愛するもの同士助け合いましょう!

638 :デフォルトの名無しさん:2006/05/14(日) 10:12:37
なんだ、このカオスは

639 :629 ◆zZtDbr6Gfc :2006/05/14(日) 10:19:23
なんだか変なことになってしまって申し訳ない

640 :デフォルトの名無しさん:2006/05/14(日) 10:33:06
639は解決済みなん?

641 :デフォルトの名無しさん:2006/05/14(日) 10:36:43
>>635
あら、ちょうどできたんだけどな。
ツリー使って作っちゃったんで、まぁよかったら見てください。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1897.zip
元データは
http://news.bbc.co.uk/2/hi/programmes/from_our_own_correspondent/4765743.stm
これをテキストファイルに落としたのを同根しています。

642 :629 ◆manko/yek. :2006/05/14(日) 10:45:59


643 :641:2006/05/14(日) 10:53:55
トリップを見たら、なんだかなぁ。釣られた感高い?
まーいいや。
プログラムの仕様上、元データの先頭行を空行から始めると動きませぬ。

644 :629 ◆zZtDbr6Gfc :2006/05/14(日) 11:07:03
>>641
ありがとうございます
なんだか偽者がたくさん沸いてしまったようで混乱させてしまって申し訳ないです

645 :デフォルトの名無しさん:2006/05/14(日) 12:17:04
>>629
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1898.txt

646 :629 ◆zZtDbr6Gfc :2006/05/14(日) 12:49:05
>>645
ありがとうございます
みなさんにいただいた物を元に自分でも作ってみたのですが
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1898.txt
これだと同じ単語を出力し続けてしまいます
どこが間違っているのかご教授願えないでしょうか

647 :605,615,621:2006/05/14(日) 13:16:05
すみません、水平タブを考慮する場合どのように改良すればよいか
よろしくお願いします

648 :デフォルトの名無しさん:2006/05/14(日) 13:18:47
>>647
ヒント
if(c == '\t')
  width += 8;


649 :デフォルトの名無しさん:2006/05/14(日) 13:29:44
>>646
>>645と同じファイルじゃね?

650 :629 ◆zZtDbr6Gfc :2006/05/14(日) 13:31:39
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1899.txt
こっちだった上に直リンしてたorz

651 :デフォルトの名無しさん:2006/05/14(日) 13:50:03
>>650
nの値が変わってないから毎回先頭から読んでる
だから、いつも同じ


652 :デフォルトの名無しさん:2006/05/14(日) 13:50:51
>>648
水平タブって幅8なのか?

653 :デフォルトの名無しさん:2006/05/14(日) 13:54:44
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):標準入力に現れた数字文字の出現回数
を縦に*を並べたグラフで表示するプログラムを表示
 mac
[4] 期限:5月15日まで

int i, ch;
int cnt[10] = {0};

while(1){
ch = getchar();
if (ch == EOF)break;
if (ch >= '0' && ch <= '9')
cnt[ch - '0']++;
}

print...
for..
printf()
return 0 ;
}
これは数字文字をカウントするプログラムということで
これをもとに書けということでした。
よろしくお願いします

654 :デフォルトの名無しさん:2006/05/14(日) 14:00:28
>>653
既にカウントされてるんだから後は順番に*を出力するだけだろ
それぐらい自分でやれ

655 :デフォルトの名無しさん:2006/05/14(日) 14:01:02
>>653
#include <stdio.h>

int main(){
int i, ch;
int cnt[10] = {0};

while(1){
ch = getchar();
if(ch == EOF)break;
if(ch >= '0' && ch <= '9')cnt[ch - '0']++;
}
int j;
for(i = 0; i < 10; i++){
printf("%d:", i);
for(j = 0; j < cnt[i]; j++)putchar('*');
puts("");
}
return 0 ;
}
>>654
ごめん、やっちゃった

656 :デフォルトの名無しさん:2006/05/14(日) 14:06:13
>>655どうもありがとうございました!!
>>654考えましたが出来ませんでした。

657 :デフォルトの名無しさん:2006/05/14(日) 14:07:43
>>655
君はもう少し問題文を読んだほうがいい

658 :デフォルトの名無しさん:2006/05/14(日) 14:08:04
>>653
ごめん、縦じゃなくて横にやっちゃった


659 :デフォルトの名無しさん:2006/05/14(日) 14:13:05
>>653
# include <stdio.h>

int main(void)
{
  int i, ch, max;
  int cnt[10] = {0};
  while((ch = getchar()) != EOF)
    if(ch >= '0' && ch <= '9')
      cnt[ch - '0']++;
  max = 0;
  for(i = 0; i < 10; i++)
    if(max < cnt[i])
      max = cnt[i];
  for(i = max; i > 0; i--)
  {
    int j;
    for(j = 0; j < 10; j++)
      if(cnt[j] >= i)
        putchar('*');
      else
        putchar(' ');
    putchar('\n');
  }
  puts("----------");
  puts("0123456789");
  return 0;
}

660 :641:2006/05/14(日) 14:14:15
>>650
スマソ、あまりにも問題文を読んでいなかったので、
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1900.zip
に修正版と、>>646を直したつもりのものを上げておきました。
どうも申し訳。

661 :629 ◆zZtDbr6Gfc :2006/05/14(日) 14:28:37
>>651
なるほど、確かにそれではループし続けてしまいますね
>>660
ありがとうございます。こちらも説明不足だったかも

662 :デフォルトの名無しさん:2006/05/14(日) 14:53:02
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
0 1 2 3 4 5 6 7 8 9   
0□□□□□□□□□□ (1)左のような碁盤目を表示後|(2)宝物の初期位置、及び点数を
1□□□□□□□□□□ 座標としてX,Yをscanfで入|予めテキスト形式のファイル
2□□□□□□□□□□ 力しその座標部分を■で表|に記憶しておき、プログラム
3□□□□□□□□□□ 示。(入力回数は20回まで)|開始時に、それを読み出すよ
4□□□□□□□□□□ そして、座標上に配列を用|うに変更せよ。テキストは以
5□□□□□□□□□□ いて10個の宝を配置。入力|下のような形式で表示。
6□□□□□□□□□□ された座標と宝の座標が一|座標X 座標Y 点数
7□□□□□□□□□□ 致すれば、あたりと表示し|5 8 3
8□□□□□□□□□□ 一致しなければ、はずれと|3 9 2
9□□□□□□□□□□ 表示する。一度取得した宝|・・・・
は、はずれを表示。それぞれの宝に構造体を用いて、|---------------------------
スコアを割り当てる。そして当たれば、スコアを加算|回数 X座標 Y座標 あたり/はずれ
し表示する。入力できる数字は0〜9、それ以外の数|最終スコア
字は、入力エラーと表示する。          |1回目 3 8 はずれ
※20回入力したら終了。             |2回目 5 9 あたり
※碁盤目の表示にはfor/while文を用いる。    |・・・・・・・・
                        |20回目 8 6 はずれ
                        | スコア=5点

663 :デフォルトの名無しさん:2006/05/14(日) 14:53:39
3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:不明 [3.3] 言語:C++
[4] 期限:2006年5月15日
[5] その他の制限:各種配列変数初期化、値設定(配列はポインタで渡す),座標の入力(scanf),
入力座標の妥当性(0〜9),入力座標と宝の座標の一致判定(ポインタ渡し),一致判定結果に従っ
てあたり、はずれの表示,20回カウンタ,スコアの加算(return命令は使用しない),それぞれ関数
を用いる。ファイルポインタ変数は、void mainの外側でグローバル変数として定義する。

碁盤目表示と■表示くらいしかできません・・・助けてください。よろしくお願いします。


664 :デフォルトの名無しさん:2006/05/14(日) 15:03:54
読みづらいって…>>662

(1)左のような碁盤目を表示後座標としてX,Yをscanfで入力しその座標部分を■で表示。(入力回数は20回まで)
そして、座標上に配列を用いて10個の宝を配置。入力された座標と宝の座標が一致すれば、あたりと表示し
一致しなければ、はずれと表示する。一度取得した宝は、はずれを表示。それぞれの宝に構造体を用いて、
スコアを割り当てる。そして当たれば、スコアを加算し表示する。入力できる数字は0〜9、それ以外の数字は、
入力エラーと表示する。※20回入力したら終了。
※碁盤目の表示にはfor/while文を用いる。

回数 X座標 Y座標 あたり/はずれ
最終スコア
1回目 3 8 はずれ
2回目 5 9 あたり
・・・・・・・・
20回目 8 6 はずれ
スコア=5点

(2)宝物の初期位置、及び点数を予めテキスト形式のファイルに記憶しておき、プログラム開始時に、
それを読み出すように変更せよ。テキストは以下のような形式で表示。
座標X 座標Y 点数
5 8 3
3 9 2
・・・・




665 :662:2006/05/14(日) 15:06:15
すいません。訂正ありがとうございます。

666 :デフォルトの名無しさん:2006/05/14(日) 15:12:24
なんでこう日本語が下手な問題文が多いんだ?

667 :662:2006/05/14(日) 15:16:59
箇条書きされていたものを無理矢理くっつけたので変になりました。
ごめんなさい。
ちなみに、
回数 X座標 Y座標 あたり/はずれ
最終スコア
1回目 3 8 はずれ
2回目 5 9 あたり
・・・・・・・・
20回目 8 6 はずれ
スコア=5点
もテキスト形式になります。
よろしくお願いします。

668 :デフォルトの名無しさん:2006/05/14(日) 16:25:10
要はよくあるランダムな数桁の数字を当てていく奴の亜種か?
あの2つ正解です。1つは場所が違います。とかって出る奴

つーか、絶対に原文より理解しやすくできる確信が無いなら
原文のまま貼れと何度ry

669 :662:2006/05/14(日) 16:38:28
原文そのままだとかなりの量になるので・・・すいません。
ようするに10個の宝というのは、任意の座標に配置するもので、
ランダムではなく作成者は宝の位置がわかっていることになります。
(宝の位置は適当に決めていいです。)
そして、その宝の座標と入力座標が一致したときに「あたり」と表示
するわけです。一度取得した宝は、その後入力しても「はずれ」にな
ります。入力座標が一致しない限りは「はずれ」を表示します。
本当にわかりにくくて申し訳ありません。


670 : ◆waJEQxiqi6 :2006/05/14(日) 16:39:22
[1] 授業単元:
[2] 問題文(含コード&リンク): 文字列str内の全ての英字を大文字に
変換する関数、および小文字に変換する関数
void str_toupper(char*str){ }
void str_tolower(char*str){ }
を作成せよ
[3] 環境
UNIX
[4] 期限) 水曜日まで
よろしくお願いします。


671 :デフォルトの名無しさん:2006/05/14(日) 16:41:59
>>669
そうやって一つ一つ質問に回答した挙句に原文よりも量が増える罠。

672 :デフォルトの名無しさん:2006/05/14(日) 16:52:11
>>670
#include <ctype.h>
void str_toupper(char *str)
{
char *ptr = str;
while (*ptr != '\0')
{
*ptr = toupper(*ptr);
}
}
void str_tolower(char *str)
{
char *ptr = str;
while (*ptr != '\0')
{
*ptr = tolower(*ptr);
}
}

ctype.h使うなと指定が無かった&こっちの方が移植性に優れるので
toupper()とtolower()使った

673 :デフォルトの名無しさん:2006/05/14(日) 16:52:33
>>670
#include<ctype.h>
void str_toupper(char*str){for(;*str;++str)*str=toupper(*str); }
void str_tolower(char*str){for(;*str;++str)*str=tolower(*str); }


674 :デフォルトの名無しさん:2006/05/14(日) 17:04:18
>>670
直感的にわかりやすく書いてみたつもり。
32='a'-'A'な。

void str_toupper(char *str)
{
int i;
for(i=0;str[i]!='\0';i++)
if('a'<=str[i] && str[i]<='z')
str[i]-=32;
}

void str_tolower(char *str)
{
int i;
for(i=0;str[i]!='\0';i++)
if('A'<=str[i] && str[i]<='Z')
str[i]+=32;
}


問題持ってくるやつ国語力無いよな。
なんで勝手に問題削ったりするんだろうか。
ってかこんなプログラムもかけない馬鹿がくるから、国語力ないのも仕方ないのかな。

675 :デフォルトの名無しさん:2006/05/14(日) 17:05:27
それじゃto〜使ってない奴

void str_toupper(char*str){
  for( ; *str != '\0'; ++str){
    if( *str >= 'a' && *str <= 'z')
      *str -= 'a' - 'A';
  }
}

void str_tolower(char*str){
  for( ; *str != '\0'; ++str){
    if( *str >= 'A' && *str <= 'Z')
      *str += 'a' - 'A';
  }
}

676 :デフォルトの名無しさん:2006/05/14(日) 17:11:54
>>662
スコアを割り当てるってあるけど…
それも入力するん?
それとも、1コ何点とあらかじめ決まってたりするの?

677 : ◆waJEQxiqi6 :2006/05/14(日) 17:15:17
どうもありがとうございました!!

678 :662:2006/05/14(日) 17:16:53
それぞれの宝にそれぞれ異なった点数を割り当てなければいけないようです。
構造体を使うらしいんですが、いまいち理解できていないのでどうすればい
いのかわかりません。
今、原文にそって問題書いております。国語力なくてすいません。

679 :デフォルトの名無しさん:2006/05/14(日) 17:25:46
【質問テンプレ】
[1] 授業単元: プログラム演習I
[2] 問題文(含コード&リンク): 5名の学生の成績データを読んで、
点数の高い順番に並べる
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: bcc55
 [3.3] 言語: C
[4] 期限: 今日の24時までです
[5] その他の制限: 構造体を利用する
seiseki.txtから読み出す
ishii,56
ueda,77
hamada,99
kudo,66
uchida,44
です

よろしくお願いします

680 :デフォルトの名無しさん:2006/05/14(日) 17:46:47
>>679
ソートの方法は選択ソートな。
作ってはみたが、scanf("%s %d")これだとなるのにscanf("%s,%d")これだとならない。
ごめん。
他の人あとよろ。
#include<stdio.h>

typedef struct{char name[20];int value;}STU;

int main(void)
{
STU student[5];
int i,j;
freopen("seiseki.txt","r",stdin);
for(i=0;i<5;i++)
scanf("%s %d",student[i].name,&student[i].value);
for(i=0;i<4;i++)
{
int max=i;
STU temp;
for(j=i+1;j<5;j++)
if(student[i].value<student[j].value)
max=j;
temp=student[max];
student[max]=student[i];
student[i]=temp;
}

for(i=0;i<5;i++)
printf("%s %d\n",student[i].name,student[i].value);
return 0;
}

681 :デフォルトの名無しさん:2006/05/14(日) 17:50:22
>>679
sortは面倒なんでqsort 1発で終わらせた。

#include<stdlib.h>
#include<stdio.h>
#define MAX_NAME_SIZE 16
#define MAX_STUDENT_SIZE 10
typedef struct student{char name[MAX_NAME_SIZE];int score;}student;
int compare_student(const void*a,const void*b){return ((student*)a)->score - ((student*)b)->score;}
int main(){
student students[MAX_STUDENT_SIZE];int i,j;
for(i=0;i<MAX_STUDENT_SIZE && scanf(" %9[^,],%d",students[i].name,&students[i].score)==2;++i){}
qsort(students,i,sizeof(student),compare_student);
for(j=0;j<i;++j)printf("%s,%d\n",students[j].name,students[j].score);
}

682 :662:2006/05/14(日) 17:55:46
原文にそって書いてみました。これでも無理なら・・・。
・for/while文を用いて、碁盤目を表示せよ。
・scanf命令で入力した2値をx,y座標として、その座標部分を■で表示せよ。
(両者とも0から9までが入力されるものとする。)
・入力値のどちらかが0から9以外の場合は碁盤目を表示せず。エラーメッセージを表示せよ。
・任意の位置に宝を配置(座標固定)。その後、座標を入力して宝の位置と一致すれば「あたり」
不一致なら「はずれ」と表示せよ。なお、作成者は宝の位置が予め知っていることになる。
(入力チャンスは1回)
・入力チャンスを20回にせよ。
・宝を探し当てた場合20回に満たなくても終了せよ。
・以下に従って関数化せよ。
関数1 入力したx,y座標に対して、入力の妥当性を示すフラグを設定する。(0から9)
関数2 入力座標x,y、宝の座標x,yに対して、一致判定をする。
関数3 妥当な入力値なら碁盤目を表示、NGならエラーメッセージを表示。
関数4 一致判定に従って、「はずれ」「あたり」を表示。
関数5 20回カウンタ、一致判定結果によりゲーム終了判定をする。一致判定結果に
・以下の座標に10個宝を配置せよ。
[x,y]=[5,8][3,9][0,5][5,9][1,7][2,8][4,6][0,1][3,7][2,5]
・入力チャンスは20回に固定せよ。
・入力の度に毎回、取得した宝の数をスコアとして加算表示せよ。
・一度取得した宝の位置は、再度指定してもはずれと表示せよ。

683 :662:2006/05/14(日) 17:56:27
・以下の配列変数を使用せよ。
tre_x[] --- 各宝のx座標
tre_y[] --- 各宝のy座標
get_comp[] --- 各宝の取得済みフラグ
・宝の配置は、以下を使用せよ。
ter_[0] = 5; tre_[0] = 8;
・・・・・・・・・・・・
tre_[9] = 2; tre_[9] = 5;
・マクロ定義を使用せよ。
(例)#define TRE_COUNT 10
・全宝物と入力座標の一致判定を関数化するのは困難なので、以下のようにメインで処理する。
get_tre = 0;
while(i < TRE_COUNT && get_tre == 0){
get_tre=check_gettre(x,y,tre[i],tre[i],get_comp[i]);
//宝の取得判定 if(get_tre==1){
score++; //スコア加算
get_comp[i]=1; //取得したら取得済みにする。
}
i++;
}
・以下に従って関数化せよ。
関数6 宝物の配置など、配列変数の設定をする。なおメインから関数へ配列は、ポインタで渡す」。
関数7 キー入力と、入力した値の妥当性を判断し、入力値[x,y]と結果をフラグで返す。関数1までの処理を含む。
関数8 全宝物の座標(ポインタ渡し)、入力座標と比較し、一致結果をフラグで戻す。
関数9 スコアの加算を行う。なお戻り値(return)は使用しない。

684 :662:2006/05/14(日) 17:58:22
・各宝物に点数を設定する。そして、宝を取得したら、その点数をスコアに加算する。(構造体を使用する)
[x,y]=点数,[5,8]=3,[3,9]=2,[0,5]=1,[5,9]=2,[1,7]=4,[2,8]=1,[4,6]=1,[0,1]=3,[3,7]=2,[2,5]=1
・宝の初期位置及び点数を予めテキスト形式のファイルに記憶しておき、プログラム開始時に、それを読み出す様にせよ。
以下の形式のテキストファイルで出力せよ。
回数 X座標 Y座標 あたり/はずれ
最終スコア
1回目 3 8 はずれ
2回目 5 9 あたり
・・・・・・・・
20回目 8 6 はずれ
スコア=5点
-------------------------------------
座標X 座標Y 点数
5 8 3
3 9 2
・・・・
-------------------------------------
・ファイルポインタ変数は、void mainの外側でグローバル変数として定義する。
FILE *read_file,
FILE *write_file,

685 :662:2006/05/14(日) 18:02:51
すいません。>>683の14行目
get_tre=check_gettre(x,y,tre_x[i],tre_y[i],get_comp[i]);
でした。

686 :デフォルトの名無しさん:2006/05/14(日) 18:03:47
長いものはあぷろだにまとめてうpしよう

687 :デフォルトの名無しさん:2006/05/14(日) 18:07:56
・宝の配置は、以下を使用せよ。
ter_x[0] = 5; tre_y[0] = 8;
・・・・・・・・・・・・
tre_x[9] = 2; tre_y[9] = 5;
じゃないのか?

688 : ◆vy.SQ3GcuQ :2006/05/14(日) 18:08:05
[1] 授業単元: C++演習
[2] 問題文(含コード&リンク):
ある金額を硬貨で支払う際に、硬貨の枚数が最も少なくなる支払い方法を求める。
金額を書き込み、それを支払うために、500円、100円、50円、5円、1円の硬貨
をそれぞれ何枚使用するかを計算して表示するプログラムを作成せよ。
使用する効果の合計枚数も表示せよ。

実行例
金額を入力してください(単位 円):3469
最も少ない枚数で3469円を払った場合、
五百円玉6枚、百円玉4枚、五十円玉1枚、十円玉1枚、五円玉1枚、一円玉4枚
の計17枚です。

[3] 環境
 [3.1] OS: UNIX
 [3.2] gcc
 [3.3] C++
[4] 期限:5/16まで

お願いします
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)


689 :デフォルトの名無しさん:2006/05/14(日) 18:09:27
[1] 授業単元: 計算機通論
[2] 問題文(含コード&リンク):
以下のマクロABS(x)の条件式と同じ働きをする式を、if文や条件式を使わない方法で書き直しなさい。
(switch文などを用いないでお願いします)

#define ABS(x) (((x) < 0) ? -(x) : (x)) 

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:5月15日
[5] その他の制限:
シフト演算での問題であるため、" ((unsigned) x) >> 31 "このような右シフトを使って答えを考えてくださいませ

690 :662:2006/05/14(日) 18:10:01
>>686さん
気が動転していて忘れてました。すいません。
なんせ期限が明日までなもので・・・。

691 :デフォルトの名無しさん:2006/05/14(日) 18:13:39
>>689
すべての型の対応もしなきゃだめなのか?

692 :デフォルトの名無しさん:2006/05/14(日) 18:14:02
[1] 授業単元: 再帰
[2] 問題文(含コード&リンク): 第一軸に上が小さく下が大きくなるように重ねられている
円盤を第三軸に移す手順を示すプログラムを作成せよ
ただし円盤を写す際はより大きい円盤を上に重ねることはできない
なお、作業用に設けられている第二軸は自由に使ってよい。
[3] 環境 Mac
[4] 期限: 月曜日まで
[5] その他の制限:基礎の基礎です。 初めて1ヶ月なので
include <stdio.h>などの基本しか使えません

すみませんがよろしくお願いします

693 :デフォルトの名無しさん:2006/05/14(日) 18:14:32
【質問テンプレ】
[1] 授業単元: C++
[2] 問題文(含コード&リンク):http://briefcase.yahoo.co.jp/ningenxp/
directx05.zip PASS:cpp
[3] 環境
 [3.1] OS: Windows XP
 [3.2] Visual C++ 2005 Express Editionのコンパイラ
 [3.3] C++
[4] 期限: できれば24時間後まで 2006/05/14 18:00
[5] その他の制限: WisdomsoftのC言語講座 構造体まで読みました
C++はクラスだけ知っています

694 :デフォルトの名無しさん:2006/05/14(日) 18:15:08
>・各宝物に点数を設定する。そして、宝を取得したら、その点数をスコアに加算する。(構造体を使用する)
これって↓みたいにしろって事だと思うんだが、
typedef struct{
int x; int y; int get_comp; int score;
}Treasure;

そうすると↓は使わないよな。どういう事だろ。

>・以下の配列変数を使用せよ。
>tre_x[] --- 各宝のx座標
>tre_y[] --- 各宝のy座標
>get_comp[] --- 各宝の取得済みフラグ

695 :693:2006/05/14(日) 18:15:28
2006/05/15 18:00でした

696 :693:2006/05/14(日) 18:16:23
コンパイルエラー出ないようにしてください


697 :662:2006/05/14(日) 18:16:54
>>694さん
上から順にやっていくので、不要になれば使わなくても大丈夫です。

698 :デフォルトの名無しさん:2006/05/14(日) 18:18:48
>>688
int main(){
int i, x;
int k[]={500, 100, 50, 10, 5, 1}, m[(sizeof(k) / sizeof(k[0]))];
scanf("%d", &x);
for(i = 0; i < (sizeof(k) / sizeof(k[0])); i++){
m[i] = x / k[i];
x %= k[i];
}
for(i = 0; i < (sizeof(k) / sizeof(k[0])); i++)
printf("%d円は%d枚\n", k[i], m[i]);
return 0;
}

699 :デフォルトの名無しさん:2006/05/14(日) 18:30:46
>>692
ハノイの塔と解釈してもよろしいのかしら?

700 :デフォルトの名無しさん:2006/05/14(日) 18:33:21
>>699 すみません。ハノイの塔というものがどういうものかわかりません・・


701 :デフォルトの名無しさん:2006/05/14(日) 18:36:13
ハノイだねぇ

702 :デフォルトの名無しさん:2006/05/14(日) 18:36:51
>>692
# include <stdio.h>

void move_one(const char *from, const char *to)
{
  printf("%s -> %s\n", from, to);
}

void move(int n, const char *from, const char *to, const char *aux)
{
  if(n == 1)
    move_one(from, to);
  else
  {
    move(n-1, from, aux, to);
    move_one(from, to);
    move(n-1, aux, to, from);
  }
}

int main(void)
{
  move(3, "第一軸", "第三軸", "第二軸");
  return 0;
}

703 :689:2006/05/14(日) 18:47:10
>>691
全ての型と申しますと何があるのでしょうか?・・・

704 :デフォルトの名無しさん:2006/05/14(日) 18:56:56
整数型
実数型


705 :デフォルトの名無しさん:2006/05/14(日) 19:00:37
>>704
整数型のみで結構です

706 :デフォルトの名無しさん:2006/05/14(日) 19:08:31
>>702 どうもありがとうございました

707 : ◆yU/FRb8iaI :2006/05/14(日) 19:21:17
(693)
【質問テンプレ】
[1] 授業単元: C++
[2] 問題文(含コード&リンク):http://briefcase.yahoo.co.jp/ningenxp/
directx05.zip PASS:cpp
次のコンパイルエラーを何とかしてください #pragma onceをsub.hの先頭につけてもだめです
main.obj : error LNK2005: "struct IDirect3D9 * g_pD3D" (?g_pD3D@@3PAUIDirect3D9@@A) は既に logo.obj で定義されています。
main.obj : error LNK2005: "struct IDirect3DDevice9 * g_pd3dDevice" (?g_pd3dDevice@@3PAUIDirect3DDevice9@@A) は既に logo.obj で定義されています。
main.obj : error LNK2005: "struct IDirect3DVertexBuffer9 * g_pVB" (?g_pVB@@3PAUIDirect3DVertexBuffer9@@A) は既に logo.obj で定義されています。
C:\Documents and Settings\裕\My Documents\Visual Studio 2005\Projects\directxtest05\Debug\directxtest05.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] Visual C++ 2005 Express Editionのコンパイラ
 [3.3] C++
[4] 期限: できれば24時間後まで 2006/05/14 18:00
[5] その他の制限: WisdomsoftのC言語講座 構造体まで読みました
C++はクラスだけ知っています

708 : ◆yU/FRb8iaI :2006/05/14(日) 19:44:21
Balloooooooooooooooooooooooo!

709 :デフォルトの名無しさん:2006/05/14(日) 19:50:30
はいはい、カオスカオス

710 :デフォルトの名無しさん:2006/05/14(日) 20:08:17
[1] 授業単元:ネットワークプログラミング
[2] 問題文(含コード&リンク):
  データグラム型のソケットを用いてecho serverを作る。
[3] 環境
 [3.1] OS: FreeBSD 6.0
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006年5月14日23:59まで
[5] その他の制限:なし

711 :710:2006/05/14(日) 20:09:46
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stdlib.h>

#define SOCK_NAME "/tmp/socket_un"

int main(){
int fd1,fd2;
struct sockaddr_un saddr;
struct sockaddr_un caddr;
unsigned int len;
int nbytes;
char buf[1024];

unlink(SOCK_NAME);

if((fd1=socket(PF_UNIX,SOCK_STREAM,0))<0){
perror("socket");
exit(1);
}

memset(&saddr,0,sizeof(saddr));
saddr.sun_family=AF_UNIX;
strcpy(saddr.sun_path,SOCK_NAME);

if(bind(fd1,(struct sockaddr *) &saddr,sizeof(saddr))<0){
perror("bind");
exit(1)
}

712 :710:2006/05/14(日) 20:11:23
if(listen(fd1,5)){
perror("listen");
exit(1);
}

for(;;){
len =sizeof(caddr);

if((fd2=accept(fd1,(struct sockaddr *) &caddr,&len))<0){
perror("accept");
exit(1);
}

while(nbyte=read(fd2,buf,sizeof(buf))){
write(1,buf,nbytes);
write(fd2,buf,nbytes);
}

close(fd2);

}

close(fd1);
exit(0);
}


713 :710:2006/05/14(日) 20:14:27
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stdlib.h>

#define SOCK_NAME "/tmp/socket_un"

int main(){
int fd;
struct sockaddr_un addr;
int nbytes;
char buf[1024];

if((fd=socket(PF_UNIX,SOCK_STREAM,0))<0){
perror("socket");
exit(1);
}

memset(&saddr,0,sizeof(saddr));
addr.sun_family=AF_UNIX;
strcpy(addr.sun_path,SOCK_NAME);

if(connect(fd,(struct sockaddr *) &addr,sizeof(addr))<0){
peror("connect");
exit(1);
}


714 :710:2006/05/14(日) 20:16:55

while(nbytes=read(0,buf,sizeof(buf))){
write(fd,buf,nbytes);
nbytes = read(fd,buf,sizeof(buf));
write(1,buf,nbytes);
}

close(fd);
exit(0);
}

以上がサンプルでもらったストリーム型のecho serverとclientです。
これと同じようなものをデータグラム型でお願いします。

715 :689:2006/05/14(日) 20:17:24
できた〜!!!俺って天才w
お前ら死ねよ

716 :デフォルトの名無しさん:2006/05/14(日) 20:54:29
天才が2時間かかる問題か・・・

717 :デフォルトの名無しさん:2006/05/14(日) 20:58:00
アッ、シーッ!!

718 :デフォルトの名無しさん:2006/05/14(日) 20:59:46
[1] 授業単元:バイナリファイル処理
[2] 問題文(含コード&リンク):  要素型がdoubleで要素が10である配列の全要素の
値を読み書きするプログラムの作成。
[3] 環境 Mac
[4] 期限: 出来れば今日中に
[5] その他の制限:なし
お願いします



719 :billy:2006/05/14(日) 21:43:30
[1] 授業単元:
[2] 問題文(含コード&リンク):
実行例
% cat source
This,is,source.
end.
% gcc -o filebreak kadai.c
% ./filebreak source
-- Line 1 --
Field 1: This
Field 2: is
Field 3: source.
-- Line 2 --
Field 1: end.
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C


720 :689:2006/05/14(日) 21:55:58
>>716
じゃあ、やってみろよwww
てか意味すらわかんないんだろwwwww

721 :デフォルトの名無しさん:2006/05/14(日) 22:10:23
>>720
こんな問題ここに持ってこようとしてる時点で
お前は頭悪すぎなんだよwwwww人としても痛い人のようだしwww
だから友達できないんだよwwwwwwwwww

722 :デフォルトの名無しさん:2006/05/14(日) 22:17:08
>>721
糞餓鬼に釣られるなよwww

723 :デフォルトの名無しさん:2006/05/14(日) 22:18:50
>>722
ごめんwwwww

724 :デフォルトの名無しさん:2006/05/14(日) 22:50:16
>>718
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
int main(void){
double x[SIZE];
FILE *in,*out;
if((in=fopen("input.dat","rb"))==NULL)exit(1);
fread(x,sizeof(double),SIZE,in);
fclose(in);
if((out=fopen("output.dat","wb"))==NULL)exit(1);
fwrite(x,sizeof(double),SIZE,out);
fclose(out);
return 0;
}

725 :デフォルトの名無しさん:2006/05/14(日) 22:58:01
>>724 助かりました。ありがとうございます!!

726 :デフォルトの名無しさん:2006/05/14(日) 23:09:13
>>680-681
ありがとうございますm(._.)m

727 :デフォルトの名無しさん:2006/05/14(日) 23:19:25
>>718
#include <stdio.h>
#include <stdlib.h>

void    readBinaryfile( char *filename )
{
    int i;
    double d;

    FILE    *file = fopen( filename, "rb" );

    for( i=0; i<10; i++ )
    {
        fread( &d, 1, sizeof(d), file );
    }

    fclose( file );
}

void    main()
{
    readBinaryfile( "hoge.txt" );
}

もう回答あったのねん

728 :デフォルトの名無しさん:2006/05/14(日) 23:46:35
>>693

#ifndef SUB_H__
    #define SUB_H__
    #define EXTN
#else
    #define EXTN extern
#endif
//------------------------------------------------------------------------
//  グローバル変数
//--------------------------------------------------------------------
EXTN    LPDIRECT3D9             g_pD3D       = NULL; // Direct3Dデバイスを作成するのに使われるオブジェクト?
EXTN    LPDIRECT3DDEVICE9       g_pd3dDevice = NULL; // レンダリングデバイス
EXTN    LPDIRECT3DVERTEXBUFFER9 g_pVB        = NULL; // Buffer to hold vertices

上の #ifndef 以下を足せばコンパイルは通る
しかし、Cの基本からやり直すことをお勧めする。

定石なので覚えるとよし

729 :デフォルトの名無しさん:2006/05/15(月) 00:01:51
>>617
#include <stdio.h>
#include <string.h>

void del_digit( char str[] )
{
    int i, j, len;

    len = strlen(str);
    for( i=0; i<len; i++ )
    {
        if( (str[i]>='0') && (str[i]<='9') )
        {
            for( j=i; j<len; j++ )
            {
                str[j] = str[j+1];
            }
            str[j] = '\0';
            i--;
        }
    }

}

void main()
{
    char    str[80] = "AAAALKJLK1122LDF0099FLK29348";

    del_digit( str );
}


730 :デフォルトの名無しさん:2006/05/15(月) 00:03:34
【質問テンプレ】
[1] 授業単元: ポインタ
[2] 問題文(含コード&リンク): 文字列s1とs2が等しければ(先頭
からナル文字までが全て同じであれば)1を、そうでなければ0を返す関数
int str_equal(const char*s1,const char*s2)を作成し、確認せよ
[3] 環境 UNIX
[4] 期限 5月16


731 :デフォルトの名無しさん:2006/05/15(月) 00:08:46
>>730
ttp://pic.skr.jp/src/img20060514220231.jpg.kintama.exe

732 :デフォルトの名無しさん:2006/05/15(月) 00:11:00
>>731
ウィルス

733 :デフォルトの名無しさん:2006/05/15(月) 00:13:05
>>730
int str_equal(const char *a, const char *b)
{ return *a == *b && (!*a || str_equal(a+1, b+1)); }

>>731
さすがにキンタマ.exeを踏む奴はいないと思われ

734 :デフォルトの名無しさん:2006/05/15(月) 00:14:43
>>720
#qrsvar NOF(k) ((k)*(1-2*((hafvtarq)(k) >> 0k1s)))
楽勝すぎ

735 :デフォルトの名無しさん:2006/05/15(月) 00:18:43
なぜrot13

736 :デフォルトの名無しさん:2006/05/15(月) 00:20:32
>>730
#include <stdio.h>
int str_equal( const char *s1, const char *s2 )
{
do {
if ( *s1 == '0' && *s2 == '0' )
return 1;
} while ( *s1++ == *s2++ );
return 0;
}
int main( void )
{
char *s[] = { "ABC", "ABC", "abc", "def" };
printf( "str_equal(\"%s\", \"%s\") : %d\n",
s[0], s[1], str_equal(s[0], s[1]) );
printf( "str_equal(\"%s\", \"%s\") : %d\n",
s[2], s[3], str_equal(s[2], s[3]) );
return 0;
}

>>731
[環境]: UNIX な人に .exe 仕掛けてもさ、とか思う。
まぁ 2ch は Win でしてるんだろうけど。

737 :デフォルトの名無しさん:2006/05/15(月) 00:21:35
>if ( *s1 == '0' && *s2 == '0' )
また高度なネタを

738 :デフォルトの名無しさん:2006/05/15(月) 00:22:18
720 がハッタリで回答を出させるために煽ってるだけかもしれないから。

739 :デフォルトの名無しさん:2006/05/15(月) 00:26:01
>>730

#include <stdio.h>
#include <string.h>
int str_equal(const char*s1,const char*s2)
{
    int i, len1, len2;
    len1 = strlen(s1);
    len2 = strlen(s2);
    if( len1 != len2 )  return 0;
    i = 0;
    while( i < len1 ) {
        i++;
        if( s1[i] != s2[i] )
            break;
    }
    if( i == len1 ) return 1;

    return 0;
}

void main()
{
    char    str1[] = "123123123";
    char    str2[] = "123123123";

    printf( "%s と %s は等しいですか?\n", str1, str2 );
    printf( "答え:%d (0:等しくない 1:等しい)\n", str_equal( str1, str2 ) );
}


740 :デフォルトの名無しさん:2006/05/15(月) 00:28:37
>>738
よくぞ見抜いた
いや、まぁ天然だったが。

741 :デフォルトの名無しさん:2006/05/15(月) 00:33:59
答え出してもりk

742 :デフォルトの名無しさん:2006/05/15(月) 00:36:31
>if ( *s1 == '0' && *s2 == '0' ) 

if ( *s1 == '\0' && *s2 == '\0' ) に変更

743 : ◆LfwtqdYGi6 :2006/05/15(月) 00:38:19
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): 方程式f(x)=x*x-4*x+1=0の小さな方の解をニュートン法で求めるプログラムを作成し、結果を

x=******

として表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ名とバージョン: Borland C++ 5.5.1 for Win32
 [3.3] 言語: C
[4] 期限: 2006.5.18
---
自分でやったところは↓までです。
大きい方の解がでてしまって、どうやったら小さい方の解が出るのかがわかりません。
#include <stdio.h>
#include <math.h>

main(){
double x,xnew,e;

e=pow(10,-10);
xnew=2006.0;

while(fabs(xnew-x)>e){

x=xnew;
xnew=((-1.0+4*x-x*x)/(2.0*x-4))+x;}

printf("x=%f\n",xnew);
}

744 :742:2006/05/15(月) 00:38:39
すんまそん 自分環境winです
UNIX環境は分からんです

745 :デフォルトの名無しさん:2006/05/15(月) 00:49:07
>>743
xnewの初期値を-2006あたりに設定すると良いとおもう

746 :デフォルトの名無しさん:2006/05/15(月) 00:51:56
ニュートン法を直感的に理解せずにアルゴリズムだけコピペしました的な。

747 : ◆LfwtqdYGi6 :2006/05/15(月) 00:59:15
>>745
ありがとうございます!!
>>746
理解してません…(´・ω・`)
1個前の課題も違う関数をニュートン法で求めるもので、その漸化式の初期値が2006.0だったのでそのままやってました…

748 :デフォルトの名無しさん:2006/05/15(月) 01:21:23
ところでなぜ本を読まない?インターネットを調べない?
馬鹿になるぞ本当にここで聞いていいのはヒントだけだぞ

749 :デフォルトの名無しさん:2006/05/15(月) 01:26:13
ここで聞いていいのは解答だけです

750 :デフォルトの名無しさん:2006/05/15(月) 02:32:00
[1]授業単元:プログラムの基礎U
[2]問題文:通貨の換金レートを入力し、
円からドル、ないしはドルから円へと計算するプログラムを作れ。
尚、以下の仕様を厳守する事。
1/円からドル、またはドルから円への選択をさせる。
2/マイナスの円及びドルを入力で終了。
3/換金レートの入力は「1ドル=○○円」もしくは、「1ドル=○○円○○銭」といった形にすること。
4/以下の4つの関数を必ず含めなさい。
A:レートを入力する関数(レートの値を戻り値)
B:円からドルを計算する関数(円とレートを引数、ドルを戻り値)
C:Bの逆
D:結果を表示する関数(結果を引数)
[3]環境
OS:Linux
コンパイラ gcc
言語:C
[4]期限 5月16日

よろしくお願いします

751 :デフォルトの名無しさん:2006/05/15(月) 02:41:02
1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
graph.txtにて表現されるグラフに対し、点0からスタートして点6に到着する
まで隣接する点にランダムに移動を行った場合の経路(閉路を含んでもよい)
を表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc(ver?)
 [3.3] 言語: C
[4] 期限:できれば今日中に・・・
[5] その他の制限:制限はないが、ヒント
・現在の点をpos,移動後の点をnextとし、乱数を利用してnextを決定する。posの初期値は0
・nextが6になれば終了。そうでなければpos←nextとして上の処理を繰り返す
・rand()関数を使うことで0以上RAND_MAX以下の整数乱数を作成することができる。
例えば、0以上s未満の乱数を発生させたい場合には、次式のようにする
r=(double)rand()/(RAND_MAX+1.0)*s;
・乱数の初期化にはsrand()関数を使う。引数に乱数の種(正整数)を入れる。
この値を変化させることで、異なる乱数系列が発生する。例:srand(3)
graph.txtは↓です

752 :751:2006/05/15(月) 02:45:23
graph.txtの内容
7
0 1
3 1
2 4
4 3
2 3
0 4
0 6
5 6
4 5
1 6
2 6 ←ここまでです

グラフは辺行列です。1行目は点の数。それ以下は辺情報です。
辺情報:例えば0 1は点0から点1に辺がつながっている。
よろしくお願いいたします。

753 :デフォルトの名無しさん:2006/05/15(月) 09:22:06
>>750
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1901.c

754 :デフォルトの名無しさん:2006/05/15(月) 09:54:19
[1] 授業単元:ファイル処理
[2] 問題文(含コード&リンク):コピー元ファイル名、コピー先ファイル名をキーボードから
読み込んで、ファイルの内容を画面に表示しながらコピーするプログラムを作成せよ
[3] 環境
 [3.1] UNIX
 [3.2]
 [3.3]
[4] 期限 今週まで

お願いします

755 :デフォルトの名無しさん:2006/05/15(月) 12:06:56
>>754
man cp

756 :デフォルトの名無しさん:2006/05/15(月) 12:19:53
>>754
#include<iostream>
#include<fstream>
#include<string>
int main(){
std::string src,dst;
std::cout << "in =";std::cin >> src;
std::cout << "out =";std::cin >> dst;
std::ifstream ifs(src.c_str());
std::ofstream ofs(dst.c_str());
for(char c;ifs.get(c);){
std::cout.put(c);
ofs.put(c);
}
}


757 :デフォルトの名無しさん:2006/05/15(月) 12:27:18
ありがとうございます。
これで提出します。

758 :デフォルトの名無しさん:2006/05/15(月) 12:46:19
>662
夕飯食ったらやるつもりだったんだが、食ったらすっかり忘れてた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1902.c

759 :デフォルトの名無しさん:2006/05/15(月) 14:39:39
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
テキストファイルを暗号化および復号化するプログラムを作成せよ.以下のように実行できること.

暗号化の場合
% kadai e publickey(=公開鍵のファイル) original(=元のファイル) result(=暗号化されたファイル)
復号化の場合
% kadai d secretkey(=秘密鍵のファイル) encrypte(暗号化されたファイル) result(複号化されたファイル)

あらかじめ公開鍵{377,11}、秘密鍵{377,23}ファイルを用意しておく。
プログラム実行時に,暗号化か復号化かどちらをするのか判定して,必要な鍵を読みこむ。
(プログラムの中には書き込まない).
暗号化なら、文字コードに直し、その整数を暗号化して、ファイルに書き込む。
復号化なら、ファイルから読み込んだ整数を復号化し、そのコードの文字を書き込む。
文字コード
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1903.txt
暗号、複合化
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1904.txt
参考プログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1905.txt

参考プログラムに上2つのプログラムを組み合わせよ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Borland C++ 5.5.1 for Win32
 [3.3] 言語: C
[4] 期限: 今日中にお願いします

よろしくお願いします

760 :デフォルトの名無しさん:2006/05/15(月) 15:10:16
D言語をちょっとかじって見たいんだが、どうよ?D?

761 :デフォルトの名無しさん:2006/05/15(月) 15:20:26
齧っても見えないと思うな。

762 :デフォルトの名無しさん:2006/05/15(月) 15:36:18
[1] 授業単元:プログラム入門
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1906.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5/17

長文ですが、よろしくお願いします。

763 :デフォルトの名無しさん:2006/05/15(月) 16:04:40
[1] 授業単元:プログラミング基礎
[2] 問題文
何人かが集まったとき同じ誕生日の
人が1組以上存在する確率が自分で入力した値:p(0.01≦ p≦ 0.99)以上
となるのは、何人以上集まったときか、を求めるプログラムを作成します
for文もしくはwhile文を必ず使用して下さい
[3] 環境
 [3.1] Windows
 [3.2] ?
 [3.3] 言語C
よろしくお願いします。

764 :初心者:2006/05/15(月) 16:33:49
【質問テンプレ】
[1] 授業単元:c言語
[2] 問題文(含コード&リンク):キーボードから
1、二つのベクトルx、y
2、スカラーs
3、行列B
を読み込み、
1、内積xy
2、sx、sy
3、Bx、By
を求めるプログラムをそれぞれ作成せよ。
[3] 環境
 [3.1] OS: Linux gnome2.4
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 今週中
[5] とくに無し。


宜しくお願いします。

765 :デフォルトの名無しさん:2006/05/15(月) 16:52:45
[1] 授業単元:プログラミング演習1
[2] 問題文(含コード&リンク): 仕入れ値と利益率(%単位)を読み込んで、売値を計算するプログラムを作成せよ。計算は以下の式に従え。
 なお、利益率は0%以上99%以下で1%刻みとする。

      売値=仕入れ値+利益+税金
      利益=仕入れ値×利益率÷(100−利益率)
      税金=(仕入れ値+利益)×5/100


[3] 環境
 [3.1] OS: (Windows
 [3.2] コンパイラ名とバージョン: Visual Studio.NET2003
 [3.3] 言語: C++
[4] 期限: 5月26まで
[5] その他の制限: まだ初期。関数printf,scanfの分野

766 :C++初心者:2006/05/15(月) 17:08:27
[1] 授業単元:プログラミング演習1
[2] 問題文(含コード&リンク): 変数nameには名前変数amountには貯金額(最初は0円)が入っている。以下のように3回貯金できるプログラムを作成せよ。ただし、変数はname,amount以外には1つしか使えない

_______________________________________________________________________
      
名前を入力してください:michinobu

michinobuさん.
現在の貯金額は0円です.
今回はいくら貯金しますか?(単位:千円):10,5

michinobuさん.
現在の貯金額は、10500円です.
今回はいくら貯金しますか?(単位:千円):0、03

michinobuさん
現在の貯金額は、10530円です.
今回はいくら貯金しますか?(単位:千円):100、0

michinobuさん.
全部で110530円貯まりました.
よくがんばりました.




[3] 環境
 [3.1] OS: (Windows
 [3.2] コンパイラ名とバージョン: Visual Studio.NET2003
 [3.3] 言語: C++
[4] 期限: 5月26まで
[5] その他の制限: まだ初期。関数printf,scanfの分野 。算術演算子、代入演算子など

767 :デフォルトの名無しさん:2006/05/15(月) 17:11:11
>>765
#include <iostream>
using namespace std;

int main()
{
int nCostPrice, nMarginPerc;

cout << "仕入れ値と利益率は?" << endl;
cin >> nCostPrice >> nMarginPerc;

cout << "売値: " << nCostPrice + nMarginPerc * nCostPrice / (100 - nCostPrice) + (nCostPrice + nMarginPerc * nCostPrice / (100 - nCostPrice)) * 5 / 100 << endl;

return 0;
}

計算するの面倒なんでべた書き
情報落ちとか起きてても知らん


>>764
誤爆先に謝ってこい

768 :デフォルトの名無しさん:2006/05/15(月) 17:12:11
>>766
全角数字だし,や、が混合してるしめんどくさいのもほどがある

769 :デフォルトの名無しさん:2006/05/15(月) 17:21:33
>>763
#include <stdio.h>

void main(void){
 float p;
 int i;
 double temp=1;
 printf("確率は?p(0.01≦ p≦ 0.99)");
 scanf("%f",&p);
 if(p<0.01 || p>0.99){//入力された確率が条件を満たしていないなら強制終了
  printf("ばーか!");
  exit(1);
 }
 for(i = 1;1-temp>p;i++){//i=1...2人あつまった時に題意を満たすかどうかをfor文の抜ける条件文で判定。
  temp=1;         //i=2...3人あつまった時、i=3...4人集まった時となる。
  for(p=i;p>0;p++){//(365*364*363*....)/(365*365*365*....)をこのfor文で計算
   temp*=365-p;
   temp/=365;
  }
 }
 printf("%d人",i+1);
}

適当。動作確認もしていない。

770 :デフォルトの名無しさん:2006/05/15(月) 17:24:14
>>769
C99非準拠の処理系だとコメントでエラー出るなw

771 :C++初心者:2006/05/15(月) 17:27:33
>>768
すみません。書き直します。
[1] 授業単元:プログラミング演習1
[2] 問題文(含コード&リンク): 変数nameには名前変数amountには貯金額(最初は0円)が入っている。以下のように3回貯金できるプログラムを作成せよ。ただし、変数はname,amount以外には1つしか使えない

_______________________________________________________________________
      
名前を入力してください:michinobu

michinobu さん.
現在の貯金額は,0円です.
今回はいくら貯金しますか?(単位:千円):10.5

michinobuさん.
現在の貯金額は,10500円です.
今回はいくら貯金しますか?(単位:千円):0.03

michinobuさん
現在の貯金額は、10530円です.
今回はいくら貯金しますか?(単位:千円):100.0

michinobuさん.
全部で110530円貯まりました.
よくがんばりました.

[3] 環境
 [3.1] OS: (Windows
 [3.2] コンパイラ名とバージョン: Visual Studio.NET2003
 [3.3] 言語: C++
[4] 期限: 5月26まで
[5] その他の制限: まだ初期。関数printf,scanfの分野 。算術演算子、代入演算子など


772 : ◆yU/FRb8iaI :2006/05/15(月) 17:35:50
>>728
動きません。まったく状況変わらず
main.obj : error LNK2005: "struct IDirect3D9 * g_pD3D" (?g_pD3D@@3PAUIDirect3D9@@A) は既に logo.obj で定義されています。
main.obj : error LNK2005: "struct IDirect3DDevice9 * g_pd3dDevice" (?g_pd3dDevice@@3PAUIDirect3DDevice9@@A) は既に logo.obj で定義されています。
main.obj : error LNK2005: "struct IDirect3DVertexBuffer9 * g_pVB" (?g_pVB@@3PAUIDirect3DVertexBuffer9@@A) は既に logo.obj で定義されています。
C:\Documents and Settings\*\My Documents\Visual Studio 2005\Projects\directxtest05\Debug\directxtest05.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。

773 :デフォルトの名無しさん:2006/05/15(月) 17:50:54
>771
#include <stdio.h>
char name[256] = {0};
int amount = 0;
void input(void){
float f;
printf("%sさん\n現在の貯金額は,%d円です. \n今回はいくら貯金しますか?(単位:千円):",name,amount);
scanf("%f",&f);
amount += (int)(f*1000);
}
int main(){
printf("名前を入力してください:");
scanf("%s",name);
input();
input();
input();
printf("%sさん.\n全部で%d円貯まりました.\nよくがんばりました.\n",name,amount);
return 0;
}

774 : ◆yU/FRb8iaI :2006/05/15(月) 17:53:26
更新しました
PASS:cpp

775 :デフォルトの名無しさん:2006/05/15(月) 18:00:19
>>762
結構めんどいじゃん。動作確認?何それ?
#include <stdio.h>

#define PCNOKAZU 10

int itibandekaino(int count);
void change(int a,int b);

int stuno[PCNOKAZU] ={10,12,13,46,4,5,6,4,8,9};
int hostno[PCNOKAZU]={111,113,116,184,165,166,100,101,135,156};
int hikaku=0;
int koukan=0;

void main(void){
 int max;
 int i;
 for(i = 0;i<PCNOKAZU;i++){
  max=itibandekaino(i);
  change(i,max);
 }
 for(i = 0;i<PCNOKAZU;i++)printf("%d,",stuno[i]);puts("");
 for(i = 0;i<PCNOKAZU;i++)printf("%d,",hostno[i]);puts("");
 printf("ばーろー%d,ちぇんじ%d",hikaku,koukan);
}


776 :デフォルトの名無しさん:2006/05/15(月) 18:01:26

int itibandekaino(int count){
 int i;
 int maxno=count;
 for(i=count;i<PCNOKAZU;i++){
  hikaku++;//はいはい。比較わろすわろす
  if(hostno[i]>hostno[maxno])
   maxno=i;
 }
 return maxno;
}
void change(int a,int b){
 int temp;
 koukan++;//はいはい。交換わろすわろす。
 temp=stuno[a];
 stuno[a]=stuno[b];
 stuno[b]=temp;
 temp=hostno[a];
 hostno[a]=hostno[b];
 hostno[b]=temp;
printf("先生のふぇらきぼんぬ");
}



777 :718:2006/05/15(月) 18:09:02
教えてくださったプログラムにsample.cに対して
gcc sample.c
./a.out
を入力しても
プロンプトが表示されたままなのですが、実行の手順が違うのでしょうか?


778 :デフォルトの名無しさん:2006/05/15(月) 18:16:12
そらそうだ。
自分で中身確認用のprintf文くらい追加しなさいよ。

他の確認法としては、
input.datとoutput.datの中身が同じになってるはずだ。


779 :718:2006/05/15(月) 18:20:27
>>778 どのように追加したらよいか教えてもらえないでしょうか?
自分で勉強っすべきなのですが、時間が迫っていて・・


780 :C++初心者:2006/05/15(月) 18:23:27
>>767
#include <stdio.h>

void main(void)
{
float

から始めるとどうなります?

781 :751:2006/05/15(月) 18:37:16
どなたか>>751をお願いいたします・・・。

782 :デフォルトの名無しさん:2006/05/15(月) 18:37:48
#include <stdio.h> 
#include <stdlib.h> 
#define SIZE 10 
int main(void){ 
double x[SIZE]; 
FILE *in,*out; 
//x[0]-x[9]まですべての配列にinput.datに書き込んである変数を読み込む
if((in=fopen("input.dat","rb"))==NULL){printf("input.datが存在しないんじゃないの?\n");exit(1);} 
fread(x,sizeof(double),SIZE,in); 
fclose(in); 

//x[0]-x[9]まですべての配列書き込んである変数をoutput.datに書き込む
if((out=fopen("output.dat","wb"))==NULL)exit(1); 
fwrite(x,sizeof(double),SIZE,out); 
fclose(out); 

//x[0]-x[9]まですべての配列を表示する
printf("x[0]:%f,x[1]:%f,x[2]:%f,x[3]:%f,x[4]:%f,x[5]:%f,x[6]:%f,x[7]:%f,x[8]:%f,x[9]:%f,",x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7],x[8],x[9]);
return 0; 


783 :デフォルトの名無しさん:2006/05/15(月) 18:41:25
>>751めんどい。
ひじょーにめんどい。


784 :751:2006/05/15(月) 18:44:56
>>783
めんどいですか・・・。

785 :シン:2006/05/15(月) 18:53:43
【質問テンプレ】
[1] 授業単元: 文字列
[2] 問題文(含コード&リンク):一定時間感覚で、自分の名前を右から左へと
テロップのように流しながら表示するプログラムを作成し、実行せよ

ASDF_TYU
SDF_TYUA
DF_TYUAS
(省略)
[3] 環境 UNIX


786 :シン:2006/05/15(月) 18:54:17
よろしくお願いします

787 :デフォルトの名無しさん:2006/05/15(月) 18:58:08
かわいそうなので、とき方の一例をば。

変数が可変だからな。
グラフの扱い方をどーするかでめんどくさ度がかわってくる。
例えば、点の個数が10以下とかたかだか知れてるなら
グラフをgraph.txtの例なら
graph[7][7]={1,4,6,0,0,0,0},//点0と隣接している点のリスト
{6,0,0,0,0,0,0},//点1と隣接している点のリスト
{4,3,6,0,0,0,0},
{1,0,0,0,0,0,0},
{3,5,0,0,0,0,0},
{6,0,0,0,0,0,0},
{0,0,0,0,0,0,0};//点6と隣接している点のリスト

となるように読み込む。
で、例えばこの配列をもとに、
hennokazu[7]={1,3,1,2,1,0};
みたいに、点から伸びている辺の本数も保存していく。
後は

next=graph[pos][rand()%hennokazu[pos];];

で、探査していけばいいんじゃね?

788 :billy:2006/05/15(月) 18:58:18
[1] 授業単元:
[2] 問題文(含コード&リンク):
実行例
% cat source
This,is,source.
end.
% gcc -o filebreak kadai.c
% ./filebreak source
-- Line 1 --
Field 1: This
Field 2: is
Field 3: source.
-- Line 2 --
Field 1: end.
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C


789 :デフォルトの名無しさん:2006/05/15(月) 19:14:07
>780 アンカーミスだと判断。
#include <stdio.h>

void main(void)
{
float f;
char name[256] = {0};
int amount = 0;
printf("名前を入力してください:");
scanf("%s",name);
#define input printf("%sさん\n現在の貯金額は,%d円です. \n今回はいくら貯金しますか?(単位:千円):",name,amount); \
scanf("%f",&f); \
amount += (int)(f*1000);
input
input
input
printf("%sさん.\n全部で%d円貯まりました.\nよくがんばりました.\n",name,amount);
}
問題の後付けはやめようぜ。


790 : ◆yU/FRb8iaI :2006/05/15(月) 19:15:54
>>728やっても動かなかったので
正しく動くように直してうpしてください・・。

791 :デフォルトの名無しさん:2006/05/15(月) 19:16:24
ループを使いたいなら↓ 変数1個ていうのは厳しいな
#include <stdio.h>

void main(void)
{
float loop;
char name[256] = {0};
int amount = 0;
printf("名前を入力してください:");
scanf("%s",name);
for(loop=0;loop<3;++loop){
printf("%sさん\n現在の貯金額は,%d円です. \n今回はいくら貯金しますか?(単位:千円):",name,amount);
scanf("%f",((float*)(name+sizeof(name)-sizeof(float))));
amount += (int)(*(float*)(name+sizeof(name)-sizeof(float))*1000);
}
printf("%sさん.\n全部で%d円貯まりました.\nよくがんばりました.\n",name,amount);
}


792 :デフォルトの名無しさん:2006/05/15(月) 20:10:30
>>785
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1908.txt
1907でミスってたのは内緒w

793 :デフォルトの名無しさん:2006/05/15(月) 20:11:12
>>790
正常な動作が何かと述べられていないのに正しくって何?


794 :シン:2006/05/15(月) 20:17:38
>>792 私に対してでしょうか?
1907とは?

795 :デフォルトの名無しさん:2006/05/15(月) 20:28:15
>>794
最初にアップロードしたソースは間違ってたって事
気にしなくておk

796 :デフォルトの名無しさん:2006/05/15(月) 20:31:31
>>792がなんか可愛い (*´ー`)σ)Д`)

797 :デフォルトの名無しさん:2006/05/15(月) 20:43:43
>>785
/* なんかできたから貼っとく。 */
#include <stdio.h>
#include <string.h>
#include <unistd.h>/* unixと言うことなのでsleep()を使った。 */

void telop(const char * str)
{
unsigned ic;
unsigned len = strlen(str);
for (ic = 0; ic < len; ++ic) {
printf("%.*s%.*s\n", len - ic, & str[ic], ic, str);
sleep(1);
}
printf("%s\n", str);
}

int main(int argc, char ** argv)
{
if (argc > 1) {
telop(argv[1]);
}
return 0;
}

798 :デフォルトの名無しさん:2006/05/15(月) 20:44:25
最近宿題投稿者の態度がすごい雑な気がする

799 :シン:2006/05/15(月) 20:48:10
>>792 >>797 どうもありがとうございました!!

800 :デフォルトの名無しさん:2006/05/15(月) 20:54:45
>>790
728ではないが。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1909.zip

801 :792:2006/05/15(月) 20:56:11
しまった 一定時間感覚部分のコードが無いw
正直すまんかったw 
>>797の人の使ってくだちい

しかしなんか難しいコードだな
printf("%.*s%.*s\n", len - ic, & str[ic], ic, str);
初めて見たわ サパーリ分からん(汗

802 :デフォルトの名無しさん:2006/05/15(月) 21:04:55
[1] 授業単元:
[2] 問題文(含コード&リンク):水平タブを考慮して、テキストの幅を正しく
調べることが出来るように以下のプログラムを改良せよ
(タブ幅は8と家庭してよいが、異なるタブ幅にも簡単な改造で対応できるようにするのが
望ましい)
[3] 環境 UNIX
[4] 期限 水曜日まで
#include <stdio.h>

int main(){
int c;
int width, maxwidth = 0;
while((c == getchar()) != EOF){
if(c == '\n'){
if(width > maxwidth)
maxwidth = width;
width = 0;
}
else
width++;
}
printf("%d\n", maxwidth);
return 0 ;
}
どうかおねがいします・・
後、この上のプログラムに対して
(プロンプト) gcc sample2.c
(プロンプト)./a.out
12 9877
^D
となって終了条件がわかりませんでした。
こちらのほうのアドバイスもよろしくお願いします

803 :802:2006/05/15(月) 21:06:12
802のプログラムではタブも1文字と数えてしまう為正しく計算できないとのことです

804 :シン:2006/05/15(月) 21:09:52
>>801 わかりました
この797サンのプログラムは難しいものをつかっているのでしょうか?
始まって1ヶ月なのであまり難しいものだとばれてしまうのですが・・

805 :792:2006/05/15(月) 21:15:37
>>804
漏れは学部4年生の糞で頭悪いから理解できないだけかも知れないが
見たことがないコードを使ってるので回避した方が良いかも知れん

>>792はポインタとか使わずに配列コピーと連結根性処理でやってるから
たぶんばれないはず エレガントさとか欠片も感じられないがw
一定時間感覚を実現したければ >>797を参考にして
#include <unistd.h>を追加して
最後のプリント文の下にsleep(1);を入れればそれっぽくなる

806 :シン:2006/05/15(月) 21:19:30
>>805 親切にありがとうございました!

807 :デフォルトの名無しさん:2006/05/15(月) 21:21:31
>>802
結局タイプミスの修正以外は何もやらなかったと…。
#include <stdio.h>
#define TAB_WIDTH (8)

int main()
{
    int c;
    int width=0, maxwidth = 0;
    while ((c = getchar()) != EOF) {
        switch(c) {
            case '\n':
            if (width > maxwidth)
                maxwidth = width;
            width = 0;
            break;
           
            case '\t':
            width += TAB_WIDTH;
            width -= width % TAB_WIDTH;
            break;
           
            default:
            width++;
        }
    }
    if(width > maxwidth)
        maxwidth = width;
   
    printf("%d \n ", maxwidth);
    return 0;
}

808 :デフォルトの名無しさん:2006/05/15(月) 21:22:16
【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文  a1=1+1/2
a2=1+1.0/2
a3=1+1/2.0
a4=1.0+1.0/2.0 の計算を行うプログラムを作成せよ。
[3] 環境
 [3.1] Linux
 
 [3.3] 言語C
[4] 期限: 明日の朝
[5] その他の制限: doubleを使用
  
お願いします。

809 :デフォルトの名無しさん:2006/05/15(月) 21:27:08
>>808
#include <stdio.h>
int main()
{
double a1,a2,a3,a4;

a1=1+1/2;
a2=1+1.0/2;
a3=1+1/2.0;
a4=1.0+1.0/2.0;

printf("a1=%lf a2=%lf a3=%lf a4=%lf \n", a1, a2, a3, a4);
return 0;
}

810 :デフォルトの名無しさん:2006/05/15(月) 21:34:01
>>808-809
これは酷いw

811 :デフォルトの名無しさん:2006/05/15(月) 21:49:07
>>810 何がひどいんだよ。糟。

>>809 すいませんが、scanfを使ったやつもお願いします。

812 :デフォルトの名無しさん:2006/05/15(月) 21:59:22
【質問テンプレ】
[1] 授業単元:計算機ソフトウェア
[2] 問題文(含コード&リンク):一連の男女の名前と経歴を読み込み、経歴の似ている男女を組み合わせ、できたカップルの
リストを出力するプログラムを考えよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: 5/17
[5] 制限なし

813 :デフォルトの名無しさん:2006/05/15(月) 22:11:54
>>812
具体的データをおくれ

814 :デフォルトの名無しさん:2006/05/15(月) 22:14:40
なんで、lfなんだろう
fはまだしもlはこの場合…

815 :デフォルトの名無しさん:2006/05/15(月) 22:19:23
誰か808の正しい答えを教えてください


816 :デフォルトの名無しさん:2006/05/15(月) 22:20:24
あるじゃん>>809

817 :デフォルトの名無しさん:2006/05/15(月) 22:21:15
>>812
似ているの定義ってなに?

818 :809:2006/05/15(月) 22:21:42
>>814
うわ、そうだった。scanf() の用法と脳内で混ざってたよorz

819 :デフォルトの名無しさん:2006/05/15(月) 22:28:11
具体的データもなにも与えられていないんです。
適当に自分でファイルを作るようです。
何を使用していいかもわからないので、プログラムの方向性などを教えてくれたら
助かります。

820 :デフォルトの名無しさん:2006/05/15(月) 22:38:23
>>818 どこが違うんですか?

821 :デフォルトの名無しさん:2006/05/15(月) 22:38:34
>>819同意

822 :デフォルトの名無しさん:2006/05/15(月) 22:38:40
>>819
俺も教えて欲しいな
今勉強してるんだ

823 :デフォルトの名無しさん:2006/05/15(月) 22:38:41
>>819
俺もわかんなくて困ってるんだよね。あんなのできるほうがおかしいって

824 :デフォルトの名無しさん:2006/05/15(月) 22:38:41
>>820
するどい質問だ

825 :デフォルトの名無しさん:2006/05/15(月) 22:38:45
>>819
オレも助かる

826 :デフォルトの名無しさん:2006/05/15(月) 22:38:47
>>820
俺も何処が違うかと問いたい

827 :デフォルトの名無しさん:2006/05/15(月) 22:38:52
>>819
ですよね。何事もベクトルを考えなきゃね。

828 :デフォルトの名無しさん:2006/05/15(月) 22:38:55
>>819
そうだよ具体的なデータを提示しろよなあ?

829 :デフォルトの名無しさん:2006/05/15(月) 22:39:01
>>820
なあ、どう違うのか教えろよな。

830 :デフォルトの名無しさん:2006/05/15(月) 22:39:01
>>819
そうだよな。宿題ならきちんとデータとか提示されるべきだ

831 :デフォルトの名無しさん:2006/05/15(月) 22:39:02
>>同意

832 :デフォルトの名無しさん:2006/05/15(月) 22:39:06
>>820
な、どこが違うのか小一時k(ry

833 :デフォルトの名無しさん:2006/05/15(月) 22:39:08
>>819
そうだよな。助かるよな

834 :デフォルトの名無しさん:2006/05/15(月) 22:39:23
>>819
そうだよね、助かるよね!

835 :デフォルトの名無しさん:2006/05/15(月) 22:39:31
>>819
オレも同じ意見

836 :デフォルトの名無しさん:2006/05/15(月) 22:39:36
>>819
私もです、助かります


837 :デフォルトの名無しさん:2006/05/15(月) 22:39:38
>>819
ホントだよな

838 :デフォルトの名無しさん:2006/05/15(月) 22:39:39
>>819
俺も勉強している。
とりあえずハローワールドを習得した

839 :デフォルトの名無しさん:2006/05/15(月) 22:39:43
もう、なんとなくだら〜

840 :デフォルトの名無しさん:2006/05/15(月) 22:39:48
>>819
確かに教えてくれたら助かるよな

841 :デフォルトの名無しさん:2006/05/15(月) 22:40:00
>>819->>820
どこが違うのか助かるよな

842 :デフォルトの名無しさん:2006/05/15(月) 22:40:20
>>819
俺もそこがわからない
具体的なデータも与えられないで作るのは無理だよな

843 :デフォルトの名無しさん:2006/05/15(月) 22:40:37
>>819 俺もそこがぜんぜんわからん

844 :デフォルトの名無しさん:2006/05/15(月) 22:40:39
>>819
とりあえずもっと詳しく

845 :デフォルトの名無しさん:2006/05/15(月) 22:40:59
>>819
大助かりだよな

846 :デフォルトの名無しさん:2006/05/15(月) 22:42:46
>>819
ほんとそうしてくれよな
助かるのにな

847 :デフォルトの名無しさん:2006/05/15(月) 22:45:56
>>844 現在パスカルの教科書を利用していて、トップダウンプログラムという
章を勉強しているのですが、その中の一問が課題でだされ、そのまま引用しました。
しかも、c言語でつくらなければ・・・

848 :820:2006/05/15(月) 22:56:46
820ですがなんですか?この流れ

849 :デフォルトの名無しさん:2006/05/15(月) 22:59:47
>>848
VIPPERだよ
http://ex14.2ch.net/test/read.cgi/news4vip/1147691639/

850 :809:2006/05/15(月) 23:01:11
>>820,824,826,829,832
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html
によると、
* printf() における f 変換はそれ単独で double を引数にとる。
* (可変引数部では暗黙の型変換により float は自動的に double として渡されるので) float、double を分ける必要が無い。
* f 変換に対する長さ修飾子 l の作用は言及されてない。

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html
によると、
* scanf() におけるただの f 変換は float *を引数にとる。
* f 変換に対する長さ修飾子 l の作用は、入力を float ではなく double に変換する。
* (渡されたポインタの先に直接書き込むので) float、double で分ける必要がある。

851 :デフォルトの名無しさん:2006/05/15(月) 23:10:55
LFにする必要はないってこと?

852 :デフォルトの名無しさん:2006/05/15(月) 23:14:24
そうですね。

853 :759:2006/05/15(月) 23:16:28
759お願いできませんか...
参考プログラムに文字コードのReadOneWord、暗号,複合化のpower_modを
組み込めばできるみたいなんですけど、自分じゃどこに入れればいいかわからないんです...


854 :797:2006/05/15(月) 23:44:19
結構流れちゃったけど書いたからには一応フォロー。

>>805
見たことがないってあんた、printf()くらい見るでしょうが。
後は型指定子にオプションつけて幅を指定しているだけ。
これが載ってない入門書は多いけど、便利なんだから
これを機に読めるようになっておいたら?

って、このままじゃ>805が可愛そうだから付け加えると、
Cで飯食ってる10年もののプログラマが、sprintf()一つで
済む処理を100行ほど掛けて書いてた例もある。
下を見るか上を見るかはお好きな方を。

855 :デフォルトの名無しさん:2006/05/15(月) 23:50:01
>>853
その、「参考プログラムに云々」ってのは他人の書いた糞コードを読まなきゃいけないから面倒なんだよね。
第一、「上の二つのプログラム」自体まともに使える代物じゃないのに。

856 :デフォルトの名無しさん:2006/05/15(月) 23:54:07
>854
差し支えなければ↓にお願い。どんなコードが見たい。

ぱっと見て「ヘタだなぁ」と思うコード その2
http://pc8.2ch.net/test/read.cgi/tech/1142741989/l50

857 :デフォルトの名無しさん:2006/05/16(火) 01:40:51
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1911.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: Cのみでお願いします。
[4] 期限: 2006、5、17、20:00
[5] その他の制限: なしです。


858 :デフォルトの名無しさん:2006/05/16(火) 02:08:46
階乗10!はしなくていいの?
ホーナー法を用いる関数では係数をグローバルな配列として宣言しても良いんだよね?

859 :802:2006/05/16(火) 06:10:30
>>807 すみません・・ どうもありがとうございました。

860 :デフォルトの名無しさん:2006/05/16(火) 07:40:40
857のうちの一つ
//・4次多項式 f(x)= 1x^4 + 2x^3 + 4x +5
//(ホーナー法を用いる)
//x( x^3 +2x^2 +4)+5
//x( x( x^2+2x) +4)+5
//x( x( x (x+2) ) +4)+5
//x( x( x (x+2) +0) +4) +5

#define KOU 4
int hona(const int x, int cnt) {
 const int kei[KOU] = {1,2,0,4}; // x^
 static int f = 0;

 if ( cnt == 1 )
  return f = x * kei[cnt-1];
 else {
  f = x * ( hona(x, cnt-1) + kei[cnt-1]);
  return f;
 }
}

int main() {
 int kai = 0, x;

 printf ("f(x) = 1x^4 + 2x^3 + 4x +5\n");
 printf ("input x:");
 scanf ("%d", &x);
 kai = hona( x, KOU )+5;
 printf("f(2) = %d\n",kai);
 return 0;
}
自信ないのでアンカ無し。これだから俺みたいな無学は困る(´・ω・`)

861 :デフォルトの名無しさん :2006/05/16(火) 07:45:17
ホーナー法ってなに?
昔カープとかにいた外人選手か?

しかし、あれだね〜
今や小学生でもパソコン持ってても不思議じゃない時代
無料コンパイラもあるわけだし。
当然最近のスペックの物なら、快適に動くだろうし
ネットで探せば、すぐソース見つかったりするし
良いね〜
俺が大学生の時初めて買ったパソコンはマック240MHz1.4GHD
はは、これじゃ、俺の持ってるギリモザのファイル一枚すらはいらねえや
ま、とりあえず
こんだけインターネットが普及して、パソ持っててあたりまえの時代だ
だから、言いたいのは
ちょっとは努力しろ、それもある理論を手書きで、偏微分して〜
このベクトル値を絶対値にかえて〜・・・・で、やっと任意の式を作って
それからアルゴリズム考えて・・・・ってなレベルじゃないだろ
大学図書館も今やパソ系の本もいっぱいあるだろうし、ググれるし・・・・
ググるなんて指を動かしマウスでスクロールするだけだぜ。楽勝じゃん。
とりあえずホーナー法はググっただけですぐ出てきた
難しくない。考えるんだ。それが血となり肉となりいつかは骨につきようとも
それは立派な人生だ


862 :デフォルトの名無しさん:2006/05/16(火) 07:48:46
授業単元: ポインタ
問題文(含コード&リンク):
配列内の要素を指すポインタに対して比較や減算を行うプログラムを作成し、
その結果を確認せよ。
環境、UNIX
お願いします


863 :デフォルトの名無しさん:2006/05/16(火) 07:52:46
>>862
>1
>861
なんつーか、授業に沿った回答しないといけなさそうだな。
つーより、只の授業内容の確認だろ。
片付けてやるなんてレベルじゃないよ。

864 :デフォルトの名無しさん:2006/05/16(火) 08:18:38
>>862
#include <stdio.h>
int main(void)
{
int arr[]={1,2,4,8};
int *p = arr;
printf("%10s%p\n","p = ",p);
printf("%10s%p\n","&arr[3] = ",&arr[3]);
printf("%10s%d\n","arr[3] = ",arr[3]);
printf("%10s%d\n","*(p+3) = ",*(p+3));
return 0;
}

865 :デフォルトの名無しさん:2006/05/16(火) 08:20:01
あー、減算だった。まあいいかw

866 :デフォルトの名無しさん:2006/05/16(火) 08:20:52
ググってみたがホーナー法ってのは、高次の項から括っていくことで
計算量減らすやり方みたいだな

なんか昨今のコンパイラなら最適化してくれそうな気もするが・・・

867 :デフォルトの名無しさん:2006/05/16(火) 08:44:25
>>866に自己レス
VC++2005で試したが、各項を計算した後、lea命令でまとめて計算してやがる・・・

868 :デフォルトの名無しさん:2006/05/16(火) 10:43:01
[1] 授業単元: プログラムの基礎B-2
[2] 問題文(含コード&リンク):
問:5
まず二つの整数を読み込む。
そこから最小公倍数、及び最大公約数を計算するプログラムを作成する。
main関数の他、以下4つの関数を必ず用いよ。
A:整数の読み込み {読み込んだ整数を戻り値とする関数}
B:最小公倍数の計算{二つの整数を引数、結果を戻り値}
C:最大公約数の計算{同上}
D:結果の表示{最大公約数、最小公倍数を引数}
[3] 環境
 [3.1] OS: バインリナックス
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語: C
[4] 期限: 5月17日
[5] その他の制限: if,swich,for分と、この問題を解くのに最低限の関数を習いました

869 :デフォルトの名無しさん:2006/05/16(火) 11:12:43
>>868
最大公約数だけ作った

int gcd(int x1, int x2)
{
return (x1 == x2 ? x1:
x1 > x2 ? gcd(x1 - x2, x2) : gcd(x1, x2 - x1));
}

870 :デフォルトの名無しさん:2006/05/16(火) 11:28:03
int gcd(int a, int b) { retrun (b) ? gcd(b, a%b) : a; }

871 :858:2006/05/16(火) 12:00:26
あれ?反応が無いな。てっきり>857は↓だと思ったんだが違ったのか?
ttp://www.u-aizu.ac.jp/course/alg1/ex/jp/ex04/#ex2


872 :デフォルトの名無しさん:2006/05/16(火) 12:02:47
[1] 授業単元:プログラミング初級
[2] 問題文(含コード&リンク): 下に示すファイルhw.datに保存されている
名前、身長、体重の個人データを1件ずつ読み込んで画面に表示し、
最後に平均身長と平均体重を表示するプログラムを作成せよ。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
p1 160 59,2
p2 174 64,5
p3 182 78,3
p4 162 51,6
ーーーーーーーーーーーーーーーーーーーーーー
[3] 環境
 [3.1] OS: UNIX
 [3.2]
 [3.3] 言語: c
[4] 期限: 木曜日まで

よろしくお願い申し上げます

873 :デフォルトの名無しさん:2006/05/16(火) 13:01:40
#include <stdio.h>
#define FILE_LINE_LENGTH (200)
#define FILE_NAME "hw.dat"
#define NAME_LENGTH (50)
int main()
{
unsigned count = 0;
double totalHeight = 0;
double totalWeight = 0;
char buf[FILE_LINE_LENGTH];
FILE * fp = fopen(FILE_NAME, "r");
if (fp == NULL) {
fprintf(stderr, "File not found or can't open.\n");
return 1;
}
while (fgets(buf, sizeof(buf), fp) != NULL) {
char name[NAME_LENGTH];
double height;
double weight;
if (fscanf("%s%lf%lf", name, & height, & weight) != 3) {
fprintf(stderr, "Illegal data.\n");
return 1;
}
printf("%s\t%g\t%g\n", name, height, weight);
totalHeight += height;
totalWeight += weight;
++count;
}
fclose(fp);
printf("average\t%g\t%g\n", totalHeight / count, totalWeight / count);
return 0;
}

874 :872:2006/05/16(火) 13:15:57
>>873
ありがとうございます。

875 :学生:2006/05/16(火) 16:16:38
[1] 授業単元:IEEE規格754による実数表現
[2] 問題文(含コード&リンク):
長さが32の0と1の列
s e(7) e(6) ... e(0) d(1) d(2) d(3) ... d(23)
を入力して、このビット列の表す実数値(実数の表現の仕方はIEEE規格754に従うものとする)を出力するCプログラムを作成せよ。

(ー1)^s×(1+M)×2^E if -127<E<128
(ー1)^s×M×2^(E+1) if E=-127
Inf if E=128,M=0
NaN if E=128,M!=0

M=Σ^23_i=1 d(i) × 2^(-i)
E=Σ^7_i=0 e(i) × 2^i -127
[3] 環境
 [3.1] OS: UNIX
 [3.2]
 [3.3] 言語: C
[4] 期限: [2006年5月17日12:00まで]
[5] その他の制限: pow(,)などの数学関数は使ってはいけないらしいです。

全く意味がわからないので、お手数お掛けしますが、どうぞよろしくお願いいたします。

876 : ◆yU/FRb8iaI :2006/05/16(火) 18:46:18
>>800
できました
ありがとうございました。

877 :デフォルトの名無しさん:2006/05/16(火) 19:04:07
細かい事だが、
「Inf if E=128,M=0」
じゃなくて
「+Inf if E=128,M=0,s=0
 -Inf if E=128,M=0,s=1」
じゃないか?

878 :デフォルトの名無しさん:2006/05/16(火) 19:48:54
>>875
#include <stdio.h>
int main(){
int i, s = 1, e = 0, bias = 127;
bool a[32]={0,
1,0,0,0,0,0,1,1,
0,1,0,1,1,0,1,1,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0
};
double out = 1.0, m = 0, mm = 1.0 / 2, ee = 1.0;
// s
s = a[0];
// e
for(i = 0; i < 8; i++)if(a[1 + i])e += 1 << 7 - i;
e -= bias;
if(e == 128){
if(m == 0)puts("+INF");
else puts("-INF");
return 0;
}
else if(e > -127 && e < 128)m += 1.0;
else e += 1;
// m
for(i = 0; i < 23; i++, mm /= 2)if(a[9 + i])m += mm;
//表示
if(s)putchar('-');
for(i = 0;i < e; i++)ee *= 2.0;
printf("%f\n", m * ee);
return 0;
}

879 :デフォルトの名無しさん:2006/05/16(火) 20:18:00
10を3で割ると3.33333…という循環小数になりますが、これを計算してコンソールに表示するCプログラムを書いてみましょう。表示が3.333333となる(小数点以下に3が6桁表示される)プログラム
が正しいプログラムです。
って問題が学校で出たんですが、最近Cはじめたばっかで分かりません。
一応学校ではLinuxのemacsを使ってやってるんですが・・・
こんなかんじで作ってみたんですが・・・
#include
main(int argc, char *argv[])
{
int i;

double d;

i = 10/3;

d = 10%3;

printf("int: %d\n", i);

printf("double: %e\n", d);
}
これでコンパイルすると、exponent has no digitsとでるんです。なんとかお教え願えませんか?


880 :デフォルトの名無しさん:2006/05/16(火) 20:27:09
printfの精度指定弄れば3.333333333って表示も可能なんだがな
これって正しくないのか?w

881 :デフォルトの名無しさん:2006/05/16(火) 20:45:30
>>879
>1

882 :デフォルトの名無しさん:2006/05/16(火) 20:46:58
>>879
まず
#include<stdio.h>
じゃね?

883 :デフォルトの名無しさん:2006/05/16(火) 20:47:00
つーか、なんで % ?

884 :デフォルトの名無しさん:2006/05/16(火) 20:50:48
日本語(SJIS)と対応する2バイトの16進コードを出力したいのですが
できますか?
[1] レポート
[2] 日本語(SJIS)と対応する2バイトの16進コードを出力せよ
  例:81AO □
  こんな感じです
[3] 環境
 [3.1] OS: Windows XP SP2
 [3.2] Visual Studio 2005
 [3.3] 言語: C/C++
[4] 期限: できれば早く


885 :デフォルトの名無しさん:2006/05/16(火) 20:55:18
>>884
いいえ

886 :デフォルトの名無しさん:2006/05/16(火) 20:59:40
>>883
ヒント:つり

887 :デフォルトの名無しさん:2006/05/16(火) 21:00:47
>>885
サンクス
やっぱり、できないんですか・・・
それではIMEを16進と一緒に全部出力とかも、できないのでしょうか?

888 :デフォルトの名無しさん:2006/05/16(火) 21:01:41
>>884
// unicodeでプロジェクト作ったら巧くいかない
const char * foo = "□";
printf("%02x%02x %s\n", foo[0], foo[1], foo);

889 :デフォルトの名無しさん:2006/05/16(火) 21:03:36
>>884
16進数ってO(オー)123456789ABCDEFで表せばいいのか?

890 :888:2006/05/16(火) 21:07:06
ちっ、釣られちまったぜ。

891 :デフォルトの名無しさん:2006/05/16(火) 21:08:42
>>889
失礼しましたミスタイプです
16進数の出力形式ですが
81 A0
こんな感じです


892 :デフォルトの名無しさん:2006/05/16(火) 21:19:36
>>882
<stdio.h> が HTML タグとみなされて削除されたんだと思われ。

893 :884:2006/05/16(火) 21:26:38
>>888
微妙に逆バージョンで
0x81A0を渡して、□を出したいのですが
int x = 0x81A0;
printf("%s", x);
当然これでは失敗です・・・


894 :デフォルトの名無しさん:2006/05/16(火) 21:35:09
#include <stdio.h>

int main(){
char s[3];
s[0]=0x81;
s[1]=0xa0;
s[2]=0x00;
printf("%s", s);
return 0;
}
こうゆうこと?

895 :884:2006/05/16(火) 21:55:46
>>894
サンクス
凄いです、ありがとう

896 :デフォルトの名無しさん:2006/05/16(火) 22:32:40
>>892
2chでそれは有り得ない。

897 :デフォルトの名無しさん:2006/05/16(火) 23:19:36
なぁ、そろそろincludeがどうしたとか言うのやめようぜ

898 :デフォルトの名無しさん:2006/05/16(火) 23:50:15
【質問テンプレ】
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
#include <stdio.h>
int main(void)
{
char a[25];
int b;
scanf("%s", a);
scanf("%d", &b);
printf("**** String is : %s ****\n", a);
printf("**** Value is : %d ****\n", b);
}
において実行時に「This is<enter>」と入力すると,どのようになるか.
また,7行目の「&b」の「&」がないと,どうなるか.それぞれ結果を示し,なぜそのような結果になったかを考察せよ.
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C
[4] 期限: 06/05/22
[5] その他の制限: printf・scanf・算術演算子・代入演算子・比較演算子まで習いました。
  ポインタはまだ習ってません。scanfにおいて%s以外のときは必ず付けろと習っただけです。

実行結果
・「This is<enter>」と入力した場合
This is
**** String is : This ****
**** Value is : -858993460 ****
・9行目の「&b」の「&」がない場合
This is
**** String is : This ****
**** Value is : -858993460 ****

899 :デフォルトの名無しさん:2006/05/17(水) 00:02:47
>>898
ブレークポイントを置いてデバッガで観察。

900 :デフォルトの名無しさん:2006/05/17(水) 00:06:05
scanf()の%sによる文字列の変換は、先行する空白文字を取り除いた上で
幅指定の範囲内で次の空白文字までを読み込む仕様である。
このため、件の入力を与えた場合、"This"のみaに格納される。
また、%sによる数値の変換も同様に、先行する空白文字を取り除いた上で
幅指定の範囲内で数字文字のみを読み込む仕様である。
このため、件の入力を与えた場合、bにはなにも格納されない。
従って、その後のprintf()の出力で"Vallue is :"の後に何が出力されようと鼻から悪魔である。
このように、課題とはいえ未初期化の変数をそのまま出力するような
糞コードを書くことは言語道断である。
また、同じ理由で%sに幅制限をつけないことは糞コード以前の問題である。
尚、bへの変換が行なわれない以上&bを渡さなかったとしても何ら問題はない。
scanf()は正常に動作を終了してしまう。
従って、無意味なコードの意味を考察させると言う糞の足しにもならない課題と言える。

901 :デフォルトの名無しさん:2006/05/17(水) 00:54:22
>>861
返事ありがとうございました。
何とか自力でできました。しかし、なんか無理ぽ。

902 :デフォルトの名無しさん:2006/05/17(水) 01:15:53
[1] 授業単元: プログラミング基礎演習TA
[2] 問題文(含コード&リンク):
10を3で割ると3.33333…という循環小数になりますが、これを計算してコンソールに表示するCプログラムを書いてみましょう。表示が3.333333となる(小数点以下に3が6桁表示される)プログラム
が正しいプログラムです。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:emacs21.3.1 
[3.3] 言語:C
[4] 期限: (2006年5月17日17:00まで)
[5] その他の制限: 今のところ「Cの計算式、変数とその代入」「コメント、データ型、宣言文」というところまでやりました。

#include <stdio.h>

int
main(int argc, char *argv[])
{
int i;

double d;

i = 10/3;

d = 10%3;

printf("int: %d\n", i);

printf("double: %e\n", d);
}
は自分で書いてみたんですが、コンパイルすると「exponent has no digits」とでてくるのでちゃんとしたのができません。
先ほどはルールを読まず大変失礼いたしました。お願いします。


903 :デフォルトの名無しさん:2006/05/17(水) 01:20:45
#include <stdio.h>
int main(int argc, char* argv[])
{
printf("%f\n", 10.0 / 3.0);
return 0;
}

904 :デフォルトの名無しさん:2006/05/17(水) 01:34:55
すぐに返信していただきましてどうもありがとうございました。ちゃんと表示されました。本当にありがとうございました!

905 :デフォルトの名無しさん:2006/05/17(水) 02:54:01
argcとargvはどこで使っているのかな?(・∀・)

906 :デフォルトの名無しさん:2006/05/17(水) 02:58:54
>>902の問題文に禿しくツッコミを入れたくなるのは俺だけか?

907 :デフォルトの名無しさん:2006/05/17(水) 03:22:00
そもそも宿題にするレベルのプログラムかと(ry

908 :デフォルトの名無しさん:2006/05/17(水) 04:13:48
[1] 授業単元: プログラミング通論
[2] 問題文(含コード&リンク):
算術式を表す文字列を標準入力から読み込み、atoi()関数を用いて数字のみを取り出し出力せよ
(標準入力)
char buf[80];
fgets(buf, 80, stdin);
(実行結果の例)
文字列を入力してください:2005+5/17
2005
5
17

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5月18日

909 :デフォルトの名無しさん:2006/05/17(水) 04:56:58
[1] 授業単元:プログラミング言語
[2] 問題文:「異なるn個の物からr個とる組合せ」をすべて表示し
さらに、その順列(並び替え?)を組み合わせごとにすべて表示するプログラムを作れ

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5月18日まで

どちらかと言えば、自主選択課題です。 が、4月からCを学び始めたもので全然プログラムが組めません。
関数(comb)?再帰? 参考になりそうなものも見つかったのですが理解できませんでした。

910 :デフォルトの名無しさん:2006/05/17(水) 08:04:47
>>908

#include <stdio.h>

int main()
{
char str[32];
scanf("%s", &str);
atoi(str);
printf("%d",str);
}

911 :デフォルトの名無しさん:2006/05/17(水) 08:17:20
>>908
問題文も読めない人はお帰りください。

912 :デフォルトの名無しさん:2006/05/17(水) 08:19:09
いけね、>911は>908宛てじゃなくて>910宛てね。

913 :デフォルトの名無しさん:2006/05/17(水) 08:58:13
>>908
#include <stdio.h>
#include <ctype.h>
int main (void){
int i=0;
char str[64];
scanf("%s",str);
while(str[i]!='\0'){
if(isdigit(str[i])){
printf("%d\n",atoi(str+i));
while(isdigit(str[i++])); /*Jump to Nondigit*/
}
else i++; /*Jump to Digit*/
}
return 0;
}


914 :デフォルトの名無しさん:2006/05/17(水) 09:36:37
自然対数の底eについて
e=1+1/1!+1/2!+・・・+1/n!+・・・が成り立つ
(問題)eの値を求めるのに近似値e(n)=1+1/1!+1/2!+・・・+1/n! (n>=1)
を計算する。n=5,6・・・,15 に対するe(n)の値を計算して表示させよ。
ただしe(n)の値は小数点以下10桁に揃えて以下のように表示させること
e 5=*.**********
e 6=*.**********
 ・・・
e15=*.**********

915 :デフォルトの名無しさん:2006/05/17(水) 11:25:40
#inclde<stdio.h>

void main(void){
int i;
double e=0,k=1;
for(i=1;i<=15;i++){
k=k*i;
e=e+1.0/k;
if(i>=5){
printf("e %d =%lf",i,e);
}
}
}

916 :915:2006/05/17(水) 11:31:07
アンカー忘れてた
>>914
あとスペルミス
#include

携帯から無茶しましたorz

917 :& ◆nLgOQJCewI :2006/05/17(水) 12:08:16
>>464
ありがとうございました、
本当に感謝です。


918 :デフォルトの名無しさん:2006/05/17(水) 13:20:02
1)科目名:C言語入門
(2)問題:
以下に示すプログラムは整数nを読み込んだ後,n個の数の総和を計算するプログラムである.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1912.txt
以下の5つの関数を作成し,main関数では関数を呼び出すだけにプログラムを書き直せ.
整数 ndata を読み込む関数(引数:無し,戻り値:ndata)
数 xval を読み込む関数(引数:無し,戻り値:xval)
読み込んだ数 xval と足しこんだ値 xsum を渡すと和を計算する関数(引数:xval, xsum,戻り値:xsum)
結果を表示する関数(引数:xsum,戻り値:無し)
平均 ave を計算する関数を新たに作成せよ.(引数:xsum, ndata,戻り値:ave)
(3)環境:OS/Linux コンパイラ/gcc 言語/C言語
(4)期限:5月18

よろしくお願いしまっす!

919 :デフォルトの名無しさん:2006/05/17(水) 14:26:51
質問です。
文字列の数列を数字に直すatoiという関数はありますが、
その逆の働きをする数字を文字列の数列に直す関数というのはあるのでしょうか?
ない場合にはどのように処理をするか教えてください。

例:
"09" → 9

という感じです。
どうかよろしくお願いします。

920 :デフォルトの名無しさん:2006/05/17(水) 14:31:51
atof

921 :デフォルトの名無しさん:2006/05/17(水) 14:35:21
char buf[64];
int a = 12345;
sprintf(buf, "%d", a);

的なことだろうか

922 :デフォルトの名無しさん:2006/05/17(水) 14:39:18
>>921
それに近いです。
例がちょっと間違っていました。
9 → "9" ですね。
いま辞書で調べたらstrtol()で出来そうなのでためしてみます。

923 :デフォルトの名無しさん:2006/05/17(水) 14:39:55
>>919
例を見ると、文字列から数字に変わってるけど

924 :923:2006/05/17(水) 14:40:35
出し遅れた

925 :デフォルトの名無しさん:2006/05/17(水) 15:06:36
実験課題でコンパイラ作る過程でitoaを作ったのを思い出した
10で割った余りをズラッと並べた文字列を最後に全部ひっくり返すというアホな考え方w
sprintfで一行で済むとも知らず・・・w orz

926 :デフォルトの名無しさん:2006/05/17(水) 15:13:32
>>921
ありがとうございます。
おかげですっきろと解決できました。
しかし、新たな問題が…。


927 :デフォルトの名無しさん:2006/05/17(水) 15:32:19
すっきろ!!

928 :デフォルトの名無しさん:2006/05/17(水) 16:23:26
おかげさまで上手く解決できました。
本当にありがとうございます。
sprintfは大変勉強になりました。
Cって本当文字の扱いが難しいですね。


929 :884:2006/05/17(水) 19:19:41
>>894
>>884です
夕べはどうもでした
一晩寝て起きて考えたら、悩みました
#include <stdio.h>

int main(){
char s[3];
s[0]=0x81;
s[1]=0xa0;
s[2]=0x00;
printf("%s", s);
return 0;
}

s[0]=0x81;
s[1]=0xa0;
これは理解できます
しかし

s[2]=0x00;

は何の為に入れているのでしょうか?(0x00終端文字?)
SJISは2バイトコードなので、
s[2]=0x00;
が入ることによって3バイトになるのでは?


930 :デフォルトの名無しさん:2006/05/17(水) 19:26:20
"□"の見た目は1文字だけど内部的には
s[0]=0x81;s[1]=0xa0;
のように2文字なので文字じゃなく文字列として扱わないといけない。
そして基本的に文字列は0で終わってないとだめ。

931 :デフォルトの名無しさん:2006/05/17(水) 19:27:57
>918
つか、その出題の意図があんまり良く分からなかったんだが、
関数の作り方を学ぶみたいな感じなのかな。
あとせっかく平均を計算しておいて表示しないのかよ、って思ったからちょっと
かってに題意を補間した。だから出題者の意図とは違うかも。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1913.txt

932 :デフォルトの名無しさん:2006/05/17(水) 19:39:46
>>909
つ『C言語による最新アルゴリズム事典』

933 :デフォルトの名無しさん:2006/05/17(水) 19:48:15
>>751
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define GRAPH_FILENAME "graph.txt"
int read_graph(int **pgraph, int *n){char buf[100];
FILE *f=fopen(GRAPH_FILENAME,"r");if(!f)return 0;
fgets(buf,sizeof(buf), f);*n = atoi(buf);if(!*n ){fclose(f);return 0;}
*pgraph=calloc(*n**n, sizeof(int));
while(!feof(f)){int l=-1,r=-1;fgets(buf,sizeof(buf),f);sscanf(buf,"%d %d",&l,&r);
if(0<=l&&l<*n&&0<=r&&r<*n){(*pgraph)[l**n+r]=1;(*pgraph)[r**n+l]=1;}}
fclose(f);return 1;}

int main(){
int *graph,n,pos=0;if(!read_graph(&graph,&n))return 1;srand(time(0));printf("%d\n",pos);
while(pos!=6){
int new_pos;do{new_pos=(double)rand()/(RAND_MAX+1.0)*n;}while(!graph[pos*n+new_pos]);
pos=new_pos;printf("%d\n",pos);}
return 0;}

今更だが、やっと投稿できるIPが回ってきたので、せっかく作ったので出してみた。
ケーブルって不便やな、こういうとき。

934 :884:2006/05/17(水) 20:16:36
くどいようですみません、下記の様に
SJISコードの0x8140〜0x81f0までを、foo.txtに書込みました
>>930氏の説明を読み、c言語の規則として額面通り受入れたいのですが
foo.txtをバイナリエディタで開いても、
81 40 81 41 81 42 81 43 81 44 81 45 81 46 81 47と規則正しく並び
s[2]=0x00;
文字列終端コードは見受けられないのですが・・・・・


#include <stdio.h>
FILE *fp;
int main(){
char s[2];
int x = 0x81;
int y ;
fp = fopen("foo.txt" ,"w");
for(y = 0x40 ;y < 0xf0 ;y++ )
{
s[0]=x;
s[1]=y;
s[2]=0x00;
fprintf(fp, "%s" ,s );
//fputs(s , fp);
printf("%s" , s);
}
return 0;
}


935 :884:2006/05/17(水) 20:19:50
スマソ
×char s[2];
○char s[3];
に訂正です

936 :931:2006/05/17(水) 20:35:49
>884
'\0' (0x00) はメモリ上の印。ここで文字列が終わりますよ、っていう。
0x00はどんな文字コードでも使われないはず。だから終端の印として機能する。
これはただの終端の印であって、printfしたときや、ファイルに書き出したときは
もちろん0x00は除いて書き出される。
strcat(a,b)の例で言えば、もちろんa[strlen(a)]にあった、'\0'が取り除かれて
b[0]がコピーされることからも分かるように、'\0'は文字列の一部としての意味は持たない。

>c言語の規則として額面通り受入れたいのですが
まあ、そういう理解でかまわないと思う。

937 :デフォルトの名無しさん:2006/05/17(水) 20:47:32
>>936
ありがとう、納得できました。


938 :デフォルトの名無しさん:2006/05/17(水) 22:27:41
[1] 授業単元:プログラミング技術V
[2] 問題文(含コード&リンク):
演習1(必須)

2つの整数を読み込み、最大公約数と最小公倍数を計算するプログラムを作成せよ。
但し、main関数のほかに以下の関数を必ず使用すること。

・整数の読み込み(読み込んだ整数を戻り値とする関数)
・最大公約数の計算(2つの整数を引数、結果を戻り値)
・最小公倍数の計算(2つの整数を引数、結果を戻り値)
・結果を表示する関数(最大公約数、最小公倍数を引数)



[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ:gcc
 [3.3] 言語: C言語
[4] 期限: 明日提出です・・

>918とおなじ演習があるんですが同じ学校なのかなw
よろしくお願いします!

939 :デフォルトの名無しさん:2006/05/17(水) 22:36:34
>>938
>>868と同じだな

940 :デフォルトの名無しさん:2006/05/17(水) 22:50:09
最小公倍数。でかい数は知らん。
int lcm(int a,int b){
int x=a;
int y=b;
while(x!=y){
if(x<y) x+=a;
else y+=b;
}
return x;
}

941 :デフォルトの名無しさん:2006/05/17(水) 22:51:45
gcm = a x b / lcm

942 :デフォルトの名無しさん:2006/05/17(水) 22:52:18
逆だた

943 :デフォルトの名無しさん:2006/05/17(水) 23:03:25
OS:WindowsXP
言語:C++

「ナイトの巡回」のプログラミングで宿題なんですが…
バックトラック法を用い、
6×6の盤で初期位置を(1,1)とし、
すべてのマスを埋めるというものです。
ただ条件があって、
・各マスに優先度を指定し、優先度が高い方を優先して移動するようにする。
・優先度は次の次まで考慮する(次に移動するマスで優先度が並ぶものがあった場合の対策)
・すべてのパターンを見つけるのにかかる時間、
 パターン数、
 移動に成功した回数(駒が移動した回数をカウントするんですが、その移動がまちがいだとわかって戻るときの移動は回数に含めない)
 を出力するというものです。

3,4日考えてるんですがうまくいきません。
時間にゆとりがある人がいらっしゃればこれを満たすプログラムを教えてくれませんか?
お願いします。

944 :デフォルトの名無しさん:2006/05/17(水) 23:52:06
>>943
次の次が等しい優先順位だった場合どちらを選択するのか
マスの動き方(?)

>すべてのマスを埋める
?
すべてのマスを網羅するでいいのか

945 :デフォルトの名無しさん:2006/05/18(木) 00:42:22
>>943
いわゆるナイト巡回問題と同様に以下の条件は前提としてよいか?
・開始マスを除き各マスを1回だけ通る。
・最後は開始マスに戻る。

対称解は別パターンとみなすか?

すべてのパターンを見つけるのなら優先度は最終的には関係なくないか?

946 :デフォルトの名無しさん:2006/05/18(木) 00:59:24
ll

947 :デフォルトの名無しさん:2006/05/18(木) 01:44:06
>>944
次の次が同じ優先度ならその場合はどちらにいっても構わないということです。
すべてのマスを網羅するでOKです。

>>945
「開始マスを除き各マスを一回だけ通る」で結構です。
ただ最後に開始マスに戻る必要はないです。あくまですべてのマスを網羅するだけでいいです。

よろしくお願いします。
自分も今奮闘中です。。

948 :デフォルトの名無しさん:2006/05/18(木) 01:50:07
>>945
補足です。
対象解も別パターンとみなします。

確かに優先度の必要性が良くわからないですね…どうなんだろ…

949 :デフォルトの名無しさん:2006/05/18(木) 01:58:17
>>947
「開始マスを除き各マスを一回だけ通る」なら移動回数は35だろう。
あとはパターンだけか。

950 :デフォルトの名無しさん:2006/05/18(木) 02:04:44
>>949

確かに自分も最初そう思ったのですが、「移動回数」ではなく「移動成功数」だそうです。

たとえば、

    初期位置→1→2→3(この移動が間違い)
           ↓
           4→6→7
           ↓
           5(この移動が間違い)

といった具合です。
文面で伝わったでしょうか…  



951 :デフォルトの名無しさん:2006/05/18(木) 02:08:47
マスに番号振って
移動先が移動可能なマスの中で一番高くないと間違いと言うこと?

952 :デフォルトの名無しさん:2006/05/18(木) 02:14:39
>>951
えっと優先度のことでよかったでしょうか?
一応自分は6×6のマスに

  234432
  346632
  468832
  468832
  346643
  234432

というように優先度を決めてやってます。

ただこれをどう活かせばいいのかで困っていて…


953 :デフォルトの名無しさん:2006/05/18(木) 02:30:11
>>943
できれば問題文をそのまま載せて欲しい。
優先度の使い方がいまいち分からん。

954 :デフォルトの名無しさん:2006/05/18(木) 02:42:07
>>953
問題文を載せたいところなんですが、
この宿題は初めから口頭で伝えられただけのもので明確な決まりはないんです。
つまり条件さえ満たせばどのようにやってもいいみたいです…
優先度の解釈も基本的にはやる人任せみたいな感じでした…すいません。

955 :デフォルトの名無しさん:2006/05/18(木) 03:01:25
【質問テンプレ】
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
最初に与えた数に従って、以下の例のように表示するプログラムを作成せよ。ただし、変数は1個しか使えない。
 
<実行例1>
数(整数)を入力してください:43
43:39
42:40
41:41
40:42
39:43

<実行例2>
数(整数)を入力してください:10
10:6
9:7
8:8
7:9
6:10


[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:Visual stdio.net 2003
 [3.3] 言語: C
[4] 期限: 06/05/22
[5] その他の制限: printf・scanf・算術演算子・代入演算子・比較演算子まで習いました。
  ポインタはまだ習ってません。scanfにおいて%s以外のときは必ず付けろと習っただけです。


956 :デフォルトの名無しさん:2006/05/18(木) 03:21:51
#include <stdio.h>

int main(){
int a;
printf("数(整数)を入力してください:");
scanf("%d", &a);

printf("%d:%d\n", a, a - 4);
printf("%d:%d\n", a - 1, a - 3);
printf("%d:%d\n", a - 2, a - 2);
printf("%d:%d\n", a - 3, a - 1);
printf("%d:%d\n", a - 4, a);
return 0;
}

957 :デフォルトの名無しさん:2006/05/18(木) 03:24:45
>>956さん
ありがとうございます

958 :デフォルトの名無しさん:2006/05/18(木) 03:33:27
>>943
バックトラック中に優先度の低い方に行っていいの?

959 :デフォルトの名無しさん:2006/05/18(木) 03:45:38
>>958
常に優先度の高い方に行かないとダメかと思います。

960 :デフォルトの名無しさん:2006/05/18(木) 04:00:26
>>959
だとすると>>952の優先度設定だと解けない

961 :デフォルトの名無しさん:2006/05/18(木) 04:10:44
>>943
問題の意味誤解しとるかもしれんがこういうこと?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1914.txt

あと次スレよろ(950だよな?)

962 :デフォルトの名無しさん:2006/05/18(木) 08:25:10
C言語/C++言語の宿題を片付けます 65代目
http://pc8.2ch.net/test/read.cgi/tech/1147902222/

963 :billy:2006/05/18(木) 09:16:31
[1] 授業単元:演習
[2] 問題文(含コード&リンク):
引数のファイルに含まれる文字列を、カンマを区切りとして単語に分けて
出力するプログラムを作成する。
実行例:
% cat source
This,is,source.
end.
% gcc -o filebreak kadai.c
% ./filebreak source
-- Line 1 --
Field 1: This
Field 2: is
Field 3: source
-- Line 2 --
Field 1: end.
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5月19日



964 :デフォルトの名無しさん:2006/05/18(木) 13:19:25
>>963
#include <stdio.h>
#include <string.h>

int
main()
{
char buf[BUFSIZ], *ptr, *cp;
int line, field;

for (line = 1; fgets(buf, sizeof(buf), stdin); line++) {
buf[strlen(buf) - 1] = '\0';
printf("-- Line %d --\n", line);
for (field = 1, cp = buf; ptr = strtok(cp, ","); field++) {
printf("Field %d: %s\n", field, ptr);
cp = NULL;
}
}
return 0;
}


965 :デフォルトの名無しさん:2006/05/18(木) 15:58:32
いきなりすいません。
ちょっとお聞きしたいことがあって書き込みました。
今ファイル処理をやっていて、xxx.datファイルを読み込むことはできたのですが、そこから自動的にxxx.pgmを出力するやり方がわかりません。
名前を固定してしまえばできるのですが、自動的にってのがわからないので、教えてください。
お願いします。

966 :デフォルトの名無しさん:2006/05/18(木) 16:26:23
>>965
>>1

967 :デフォルトの名無しさん:2006/05/18(木) 16:35:33
>>965
文字列fnameの後ろから3文字を"pgm"に置き換えるすさまじく単純な方法w
strcpy( fname + strlen(fname) - 3, "pgm");

968 :デフォルトの名無しさん:2006/05/18(木) 17:07:40
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1915.txt
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 2006年05月19日08:00
[5] その他の制限:特に無し

以上です、お願いします。

969 :デフォルトの名無しさん:2006/05/18(木) 17:30:57
# include <stdio.h>

double average(double sum, int num);

double average(double sum, int num)
{
  return sum / num;
}

int main(void)
{
  double input;
  int num = 0;
  double sum = 0;
  while(scanf("%lf", &input) == 1 && input > 0)
  {
    sum += input;
    num++;
  }
  if(num == 0)
    printf("No data.\n");
  else
    printf("average: %.3f\n", average(sum, num));
  return 0;
}

970 :969:2006/05/18(木) 17:35:13
ごめん。averageはこっちが正しい。
  return (double)(int)(sum / num * 1000 + 0.5) / 1000;

971 :デフォルトの名無しさん:2006/05/18(木) 17:38:34
average関数内では、平均を求めること以外のことを行ってはいけない.

972 :969:2006/05/18(木) 17:41:38
>戻り値は平均(合計を回数で割った数の小数点以下4桁目を四捨五入したもの)とする.
とあるから、四捨五入も平均を求める作業に含まれると思うが。

973 :デフォルトの名無しさん:2006/05/18(木) 18:44:20
>>970さん
ありがとうございました
サンプルプログラムでも、四捨五入をしていたのでOKです。


974 :デフォルトの名無しさん:2006/05/18(木) 19:15:25
[1] 授業単元:演習
[2] 問題文(含コード&リンク):
キーボードから0以上の整数を1つ読込み、
入力した数と同じ個数の文字'+'を一行に表示するプログラムを作成しなさい。
*条件
負の数が入力された場合は、"error"とエラーメッセージを表示して終了する。
整数以外の入力は考えなくてよい。
0が入力された場合は、空行(何も文字が表示されていない行)を表示する。
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン: gcc4.00
 [3.3] 言語: C
[4] 期限:06年05月18日
[5] その他の制限:特に無し
以上ですよろしくお願いします。

975 :デフォルトの名無しさん:2006/05/18(木) 19:22:38
>>974
# include <stdio.h>

int main(void)
{
int n,i;
scanf("%d",&n);
if (n>=0){
for (i=0;i<n;i++){
printf("+");
}
}else{
printf("error!\n");
}
return 0;
}

976 :デフォルトの名無しさん:2006/05/18(木) 19:25:14
>>975
i要らなかった

977 :デフォルトの名無しさん:2006/05/18(木) 20:00:51
【質問テンプレ】
[1] 授業単元: 復習
[2] 問題文(含コード&リンク):
  キーボードから 行と列それぞれ数値1〜80までの値を入力し
  それ以外の物が入力されたら正しい入力がされるまで繰り返す。
  なお、入力した値分 #を描画し長方形を表示するものとする。
[3] 環境
 [3.1] OS:Windows 
 [3.2] Visual C++ 2005
 [3.3] 言語:C言語
[4] 期限:06年05月20日
[5] その他の制限:正しい値以外は絶対に通らないように製作。ファンクションや複数キーを含む


978 :デフォルトの名無しさん:2006/05/18(木) 20:16:10
【質問テンプレ】
[1] 授業単元: プログラミング演習I
[2] 問題文(含コード&リンク):
 住所録の作成と検索
 個人の情報を格納し、整理するプログラム
 扱う項目:姓、名、住所、電話番号(もちろん架空のもの)
[3] 環境
 [3.1] OS:Windows 
 [3.2] bcc
 [3.3] 言語:C言語
[4] 期限:06年05月21日0時
[5] その他の制限:姓、名で検索を行い、検索結果を標準出力に表示

よろしくお願いしますm(._.)m

979 :デフォルトの名無しさん:2006/05/18(木) 20:39:58
>>977
#include<stdio.h>

int main(void){
int i,j;
int n,m;

do{
scanf("%d",&n);
}while( !(n>0) && !(n>80) );

do{
scanf("%d",&m);
}
while( !(m>0) && !(m>80) );

for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("#");
}
printf("\n");
}

return 0;
}

980 :979:2006/05/18(木) 20:41:03
ごめん今コンパイルしたらバグってたorz
>>979

981 :デフォルトの名無しさん:2006/05/18(木) 20:45:37
>>979は多分↓にすれば動く

do{
scanf("%d",&n);
}while( (n<0) || (n>80) );

do{
scanf("%d",&m);
}
while( (m<0) || (m>80) );

982 :billy:2006/05/18(木) 20:53:27
>>964
どうやって実行するのですか?


983 :977 :2006/05/18(木) 21:07:23
本当にありがとうございます。間に合いそうです。

984 :デフォルトの名無しさん:2006/05/18(木) 21:42:44
[1] 授業単元:
[2] 問題文(含コード&リンク):
-------------------------------------------------------------------------------
次のような, 日付を表すクラスDateを実装してみてください.

Dateは, 年, 月, 日をそれぞれintの値で持っている.
Dateは, 1日日付を進めるメンバ関数を持っている.
Dateは, 1日日付を戻すメンバ関数を持っている.

始めは単にそれぞれの値をget(取得), set(設定)するメンバ関数と, 単なる値を書き変えるだけのメンバ関数を作れば良いでしょう.
それができたら, 各月の日数や閏年を考慮するものも作ってみましょう. また, あると便利そうなメンバ関数も追加してみましょう. (例えば日付の表示をするなど)

ヒント:閏年は, 「400で割り切れる」または「100で割り切れなくて4で割り切れる」年です
-------------------------------------------------------------------------------
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:Visual Studio .NET 2003
 [3.3] 言語:C++
[4] 期限:2006/5/26

985 :デフォルトの名無しさん:2006/05/18(木) 21:47:09
[1] 授業単元:プログラミングI
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1916.txt
キーボードから1つの実数を入力し(その数をaとする),
半径aの円の面積
辺の長さがaの正方形の面積
辺の長さがaの正方形からそれに対して内接する円の部分を除いた面積
(正方形の面積から内接する円の面積を引いたもの)
の3種類の面積を求めるプログラムを作成しなさい.
このとき, 円の半径を引数として与えたとき,面積を戻す関数double circle(double r)と,
正方形の辺の長さを引数として与えたとき,面積を戻す関数double square(double s)を 作成しなさい.
main関数部は,以下のプログラムの雛形に対して,
正方形に内接する円の部分を除いた面積を求めるための追加以外の変更を加えないこと. また,面積は小数点以下2桁で表示すること.

[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン:gcc 4.0
 [3.3] 言語: C
[4] 期限:明日の朝9時まで
[5] その他の制限:無し

よろしくお願いします。

986 :デフォルトの名無しさん:2006/05/18(木) 21:47:50
>>985

記入漏れが有りました。
OSはLinuxです。
よろしくお願いします。

987 :デフォルトの名無しさん:2006/05/18(木) 22:11:14
■課題科目:C言語
■実行環境:Visual stdio.NET2003
■提出期限:5月19日
■内容  :次のプログラムを自己参照構造体を使うように変更せよ。
      プログラム長いので、UPしました。よろしくお願いいたします。
■プログラム:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1917.txt


988 :デフォルトの名無しさん:2006/05/18(木) 22:17:01
>>984
あなたの日本語が理解できません


989 :デフォルトの名無しさん:2006/05/18(木) 22:34:01
>>987
この問題は大学何年生くらいのレベルなんですか?

990 :デフォルトの名無しさん:2006/05/18(木) 22:48:16
>>989
2年生くらいです

991 :デフォルトの名無しさん:2006/05/18(木) 23:02:40
>985


double circle(double r)
{
/* ここを作成する */
return r * r * PI;
}

double square(double s)
{
/* ここを作成する */
return s * s;
}
include文の下に
#define PI 3.141592
っていれてね。

これが出来ないとこれからきついと思われ。


992 :デフォルトの名無しさん:2006/05/18(木) 23:07:42
>>987
自己参照構造体ってことは
リスト構造で動くようにしろと考えておkなのかな?

993 :デフォルトの名無しさん:2006/05/18(木) 23:11:09
>>992
OKです。

994 :デフォルトの名無しさん:2006/05/18(木) 23:24:01
うん、問題見たら線形リストはまったく関係ないね
問題見ないで言うもんじゃないね
サーチするときにでも使うのではないかと予想


995 :デフォルトの名無しさん:2006/05/18(木) 23:28:33
>>984
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1918.zip

#main関数は作ってないので、適当に自作してね
#日付の表示をするメソッドも、作るんなら勝手に作ってね
#privateメソッドのnext,beforeをpublicにしたい場合は、修正が必要ですよ


996 :デフォルトの名無しさん:2006/05/18(木) 23:47:19
>>985

>>991サンの出してくれた奴に、3番目の
>>辺の長さがaの正方形からそれに対して内接する円の部分を除いた面積

を導く式を追加してね。

997 :デフォルトの名無しさん:2006/05/18(木) 23:56:59
rgrg

998 :991:2006/05/19(金) 00:26:48
>996

おっと、読みすごした。スマソ

999 :デフォルトの名無しさん:2006/05/19(金) 00:57:01
↓綺麗に終わっておくれ

1000 :1000:2006/05/19(金) 00:59:52
日々之精進
1000なら皆が宿題を理解できる

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

357 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)