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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けない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
【過去ログ検索】        http://chomework.sakura.ne.jp/
【wiki】               http://www23.atwiki.jp/homework/

【前スレ】
C/C++の宿題を片付けます 87代目
http://pc11.2ch.net/test/read.cgi/tech/1179025919/
2デフォルトの名無しさん:2007/05/25(金) 14:22:53
乙!
3 ◆k6YSo.f4Pk :2007/05/25(金) 16:16:04
大変恐縮ですが以下の問題をどなたか解る方教えていただけるとありがたいです。

[1] 授業単元:アルゴリズム
[2] 次の手順で,データ構造「ヒープ」を実現するプログラムheap.cを作成せよ.

1.まず,ヒープに保存する整数データの個数をキーボードから入力する.

2.次にデータを1つキーボードから入力する.
そして入力された1個のデータをヒープに挿入する関数(例えばinsert())を呼び出しヒープを完成させる.
データが1つ挿入されるたびにヒープの状態をディスプレイ上に表示する(表示方法は各自に任せる).
この動作を繰り返し,個数分のデータをすべてヒープに保存する.

3.個数分のデータが全て入力できたら,ヒープの完成状態(木構造)をディスプレイ上に表示する.

4.同様に,ヒープ中の最小データを1つずつ取り出す関数deletemin() を呼び出し,
保存されているデータがなくなるまで個数分だけ繰り返す.
データ挿入時と同様にヒープの各状態をディスプレイ上に表示する.

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:c言語
[4] 期限: 2007年5月28日
[5] その他の制限:データ構造「ヒープ」にデータを1つずつ入れ,
そして1つずつデータを取り出すときの動作を理解すること.
くれぐれも全てのデータを一旦入力してからヒープを作り直すのではなく,
一つ一つデータを読み込みながら処理が進む過程を理解すること.

データの入力はファイルから読み出すと良い.つまり,キーボードから入力する代わりにファイルから読み出す

この問題に見覚えのある人はきっと同じ学校ですね。この授業毎回面倒だよね。
4デフォルトの名無しさん:2007/05/26(土) 00:41:46
面倒ならやめちまえ
5デフォルトの名無しさん:2007/05/26(土) 01:02:42
別に良くある問題だと思うが
6デフォルトの名無しさん:2007/05/26(土) 01:59:24
[1]PGMファイルの画像処理

PGMのデータを作ったのですが、途中で止まってしまい、デバックで確認したら
プログラム中の  g[i][j]= v;   ところで落ちているみたいなのですが、
このような書き方は間違いなのですか?またいい方法があったら教えてもらえないですか?
プログラムは長いので分けます。

/*--------------------------------------------------------
指定の入力ストリームからPGM形式の画像データを読み込む
--------------------------------------------------------*/
int readPGM ( FILE *fp , unsigned char **g, int *ph , int *pw ){

int i, j, m, v;

if( fgetc(fp) != 'P' || fgetc(fp) != '2' ){
printf("このデータはPGM形式ではありません。\n");
return (1);
}

if ( fscanf( fp , "%d" , pw ) != 1 ){
printf("幅の読み込みに失敗しました。\n");
return (1);
}

if ( *pw > MAXWIDTH) {
printf("幅(%d)が%dを越えています!\n", *pw , MAXWIDTH);
return (1);
}

7デフォルトの名無しさん:2007/05/26(土) 02:00:32
if ( fscanf( fp, "%d", ph ) != 1 ){

printf("高さの読み込みに失敗しました。\n");

return (1);

}
if ( *ph > MAXHEIGHT ){

printf("高さ (%d)が%dを越えています!\n", *ph , MAXHEIGHT);

return (1);

}
      if ( fscanf( fp , "%d", &m ) != 1){

printf("最大輝度値の読み込みに失敗しました。\n");

return (1);

}

if ( m != MAXVALUE ){

printf ("最大輝度値(%d)が%dではありません。\n", m ,MAXVALUE);

return (1);

}

8デフォルトの名無しさん:2007/05/26(土) 02:23:33
C++で、線形空間とか内積空間を実装する事って可能でしょうか?
9デフォルトの名無しさん:2007/05/26(土) 02:24:29
可能
10デフォルトの名無しさん:2007/05/26(土) 02:59:13
>>3
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4062.txt

ここまでやって飽きた。
heap関連はほとんど出来てるつもりだから、後頑張れ。
もしくは他の人頑張ってくれ。
11デフォルトの名無しさん:2007/05/26(土) 03:13:14
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4044.txt
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: C
[4] 期限: 5/28
[5] その他の制限: 特になしです

前スレにも書いたのですが、まだ回答いただけていないので
よろしくお願いします
12デフォルトの名無しさん:2007/05/26(土) 03:30:48
>>11
何なんだこの分かりづらいサンプルソースは・・・。
こんなヤツが講師やってんのか、それとも授業進行のせいでこうなってんのか・・・。
13デフォルトの名無しさん:2007/05/26(土) 03:31:04
[1] 授業単元:情報工学実験T
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4063.txt
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC
 [3.3] 言語: C言語
[4] 期限: 2007年5月27日
[5] その他の制限: 特になしです

ちょっと長いですけとよろしくおねがいします。
14デフォルトの名無しさん:2007/05/26(土) 03:34:25
>>13
すいません
期限28日です
15デフォルトの名無しさん:2007/05/26(土) 04:03:49
>>11
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4064.txt

>>13
問題2のテストデータによる出力plz

今日はもう寝る。
16デフォルトの名無しさん:2007/05/26(土) 09:53:11
すいません、>>7の続きです。
for ( i=0 ; i < *ph ; i++){
for ( j=0 ; j < *pw ; j++){

if ( fscanf( fp ,"%d", &v) != 1 ){

printf("要素(%d %d)が読み込めませんでした。\n", i , j );
return (1);

}

if( v < 0 || v > MAXVALUE ){

printf("要素(%d %d)の輝度値%dが範囲を越えています。\n", i, j, v);

return (1);

}

g[i][j]= v;

}

}

return (0);

}
1711:2007/05/26(土) 10:08:00
>>15
ありがとうございます!!
18デフォルトの名無しさん:2007/05/26(土) 10:10:54
19デフォルトの名無しさん:2007/05/26(土) 11:33:03
>>16
g[][]だと配列の横幅(宣言のとき右側の[]に書く要素数)、分からないだろ?
だから使えない。(詳しくは別の本当の理由があるけど省略)

実際のループの部分は呼び出し元の形分からないと書けないから、
とりあえず関数の引数を unsigned char **g じゃなくて
unsigned char *g にした方が色々分かり易いと思う。

で。
>[1]PGMファイルの画像処理
にテンプレ守ろうとした心意気が若干見れるから回答したけど
ここは宿題片付けるスレだからな。
単なる質問はC/C++のスレ行った方が良い。
↓とかか?
http://pc11.2ch.net/test/read.cgi/tech/1178432985/l50
20デフォルトの名無しさん:2007/05/26(土) 12:39:41
[1] 授業単元:基礎情報実験第三(B)
[2] 問題文(含コード&リンク):
以下の形式のテキストデータを与える
10001001
10100010
00111011
01111101
11111111
10101000
10101011
10101110

これは、8×8の正方形の形で
一つ一つのセルに1か0のデータが書き込まれている。

本問題では、このファイルを読み込み、
(実行時にファイル名を指定できるようにすること。方法は問わない)
最も大きい、1のみが書き込まれた正方形の固まりのセルを見つけ出すこと。
この時、最も左上の座標と、見つけ出した正方形の一辺の長さを出力せよ。
(例の場合は(3,3) 3と出力らしいです。)
なお、上記の例では、8×8の大きさであったが
実行時には、おおよそどのような大きさであっても
実行できるようにプログラムを工夫すること。
また、アルゴリズムのオーダーはO(n^2)を超えないことが望ましい。

[3] 環境
 [3.1] OS: Unix
 [3.2] コンパイラ名とバージョン: GCC
 [3.3] 言語: C
[4] 期限: 5/29
[5] その他の制限: 特になし。
21デフォルトの名無しさん:2007/05/26(土) 13:01:35
>>20
最も左上って何?
22デフォルトの名無しさん:2007/05/26(土) 13:17:49
>>21
見つけ出した正方形の最も左上のセルの座標と言うことです。
23デフォルトの名無しさん:2007/05/26(土) 13:20:33
>>22
言い方が悪かった。(1, 0)と(0, 1)ではどっちが左上?(2, 0)と(0, 1)では?
24デフォルトの名無しさん:2007/05/26(土) 13:29:33
>>23
講義中に言及が無かったのですが、
講義全体では(X,Y)の形式で、右方向がX、下方向にYということです。

複数見つかる場合についても言及が無かったのですが
(教授、穴だらけだよ・・・。)
おそらく、講義の状況から複数出せということなので

0111
1111
1111
1110
の場合は、
(2,1) 3
(1,2) 3
という出力でいいと思います。

穴だらけすぎるので、また抗議したいと思います。
(問題は、例年通りらしいのですが・・・。)
25デフォルトの名無しさん:2007/05/26(土) 13:29:40
どっから0が出てくるんだろう
2623:2007/05/26(土) 13:31:40
>>24
ごめん、最も左上の正方形を報告するんだと勘違いしてた。
それなら問題ない。
27デフォルトの名無しさん:2007/05/26(土) 13:39:35
確かに0出てこないなw
セル全体の一番左上の座標は(1,1)だ。
Cプログラマの盲点
28デフォルトの名無しさん:2007/05/26(土) 13:42:13
>>18.19さん
ありがとうございます。
29デフォルトの名無しさん:2007/05/26(土) 13:43:52
>>27
どうせ、出力時に1を足すだけなんだが。
30 ◆k6YSo.f4Pk :2007/05/26(土) 14:35:00
>>10さんありがとうございます。大変助かりました。
何とか>>3このプログラムを完成させたいのですがどなたか協力していただけないでしょうか?
31デフォルトの名無しさん:2007/05/26(土) 14:44:31
>>30
おまい、ちょっとは自分でがんばれよw
32 ◆k6YSo.f4Pk :2007/05/26(土) 14:47:43
>>31
ダメです・・・。どーしてもわかりません><
33デフォルトの名無しさん:2007/05/26(土) 14:55:04
>>20
土曜の午後には程よい問題だった(いろいろ手を抜いてるけど)
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4065.c

>>30
ついでにやっといた
10とは別物
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4066.c
34デフォルトの名無しさん:2007/05/26(土) 15:09:42
>>33
課題だけではなく、いろいろと勉強になりました
ありがとうございました。
(2次元配列っぽくヒープにアクセスする方法は
 すごく面白かったです。)
35デフォルトの名無しさん:2007/05/26(土) 15:50:09
>>34
ここに質問するレベルのやつが、あの書き方を読めるって言うのは意外。
>>33は意地悪だなと思っていたのだが、そうでもないのか?
どうも、ゆとりを舐めすぎてるな、吊って来る。
36デフォルトの名無しさん:2007/05/26(土) 16:05:10
>>33
これは賢いな。こんな単純な方法があったとは。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4067.c
せっかく書いたから晒すけど、あまり良いところはないかも。
37デフォルトの名無しさん:2007/05/26(土) 16:13:32
>>20
気になったんだが、問題文となるテキストは正方形だけ?

>>33
アルゴリズムに感心した
38デフォルトの名無しさん:2007/05/26(土) 16:21:53
>>37
そうでなくても、ここから改造できなきゃ、単位落とせって感じだが。
39デフォルトの名無しさん:2007/05/26(土) 18:54:27
>>33
(゚д゚)ウマー。それは気づかなかったわ。
4013:2007/05/26(土) 19:07:36
>>15
すいません、問題2のテストデータによる出力見当たりません。
なしでなんとかならないでしょうか?
41デフォルトの名無しさん:2007/05/26(土) 21:08:35
[1] 授業単元:プログラミング言語C
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4078.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Borland
 [3.3] 言語:C
[4] 期限:5/28の23:59まで。
[5] その他の制限: 特になし

情報不足かもしれませんがどなたか出来る方よろしくお願いいたします。
42デフォルトの名無しさん:2007/05/26(土) 22:25:51
>>35
個人的には分かりやすくて良いコードだと思うんだけど、どの辺が意地悪?
43デフォルトの名無しさん:2007/05/26(土) 22:27:53
>>20が面白そうなんでやってみようかと思うんだが、
依頼者見てるかな。

> なお、上記の例では、8×8の大きさであったが
> 実行時には、おおよそどのような大きさであっても
> 実行できるようにプログラムを工夫すること。

「どのような大きさでも」ってあるけど、
長方形とか非矩形の場合もあるのかな?それとも正方形限定でいいのかな?

あと、そのファイルには '0' か '1' (か改行) しか書いていないと限定していいのかな?
44デフォルトの名無しさん:2007/05/26(土) 23:03:25
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):タートルグラフィックライブラリを用いて
ドラゴン曲線を描くプログラムを作成せよ。
[3] 環境
 [3.1] OS: Turbolinux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5/28 17:00
[5] その他の制限:引数を持った関数の再帰を利用する。
ドラゴン曲線は・直線をそれを底辺とする直角二等辺三角形の2辺に置き換える。
       ・以降は、交互に上下に入れ替わった辺で置き換える。
       ・これを繰り返す。
ことで作れる曲線です。

どなたか分かる方教えてください。お願いします。
45デフォルトの名無しさん:2007/05/26(土) 23:25:10
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4080.txt
[3] 環境
 [3.1] OS: (Windows/Linux/等々) WindowsXP
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) cygwin
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: 5/27 12:00まで
[5] その他の制限: 特になし

お手数ですが、よろしくお願いします
46デフォルトの名無しさん:2007/05/26(土) 23:32:52
>>44
タートルグラフィックスライブラリとやらの入手先
47デフォルトの名無しさん:2007/05/27(日) 00:05:30
48デフォルトの名無しさん:2007/05/27(日) 00:08:14
>>13の問題1の方は出来たんだけど、問題2の方が出来ない。
ごり押しでやれば出来るのは分かってるんだが、そこで思考停止してしまって・・・。

「システムログを解析する:」のアルゴリズムを拡張した形ってことは、
つまり各ユーザ及びジョブ(またはプログラム)の開始時間を保存・管理しないんだと思うけど、
誰か案やらヒントだけでも良いからそういう方法思いつかない?

ちなみに問題1.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4084.txt
49デフォルトの名無しさん:2007/05/27(日) 00:32:09
>>47
winlib.hとやらがない
50デフォルトの名無しさん:2007/05/27(日) 00:38:54
51デフォルトの名無しさん:2007/05/27(日) 00:41:10
52デフォルトの名無しさん:2007/05/27(日) 01:48:50
てめぇ〜ら、0^0がなんなのか、もう分かったよな?答は不定、ぶっちゃけると存在しない。
もし人間が勝手に、ふっと沸いて0^0と書いたとしても、結果の値は存在せず。
不定だから1でも0でも良いんだよとか言っちゃっている奴は注意。
不定だから何か適当な値でも良いのではなく、値そのものが存在しない。
53デフォルトの名無しさん:2007/05/27(日) 02:29:05
いや、申し訳ないが0の0乗なら0なんだ。
54デフォルトの名無しさん:2007/05/27(日) 02:32:45
>>53 ダウト。知ったか&勘違い野郎乙w ネットでそれに関して検索するといろいろと出てくるけど
答えは定まっていない不定だよ。極限を使ったやり方を紹介しているところもあるが、それは
限りなく0に近づけた底に限りなく0に近づけた指数が限りなく1に近づく(収束)すると言うが
限りなく0に近い値は0にはならない。そして結果についても0や1という具体的な値にはならない。
極限で求めるやり方は極限を用いることそのものがすでに不適切。
55デフォルトの名無しさん:2007/05/27(日) 02:35:01
よく、電卓プログラムやべき乗を求めるライブラリを使うとか、Google電卓を使ったとか言う人の意見もあるが
それについてはまったくのでたらめ。単にプログラム側が底をなんにしようと0乗を1と出すように
仕組まれているだけであって、本当ならその場合は条件分岐にて処理をして 不定 やら NAN とすべき。
56デフォルトの名無しさん:2007/05/27(日) 02:39:13
なぜ急にこんな話題を?
57デフォルトの名無しさん:2007/05/27(日) 02:41:04
>>54
いや、申し訳ないが、>53には1だとは書いてないのだが。
58デフォルトの名無しさん:2007/05/27(日) 02:42:36
>>56
暴れたいんだけどネタがないからしょうがなく自分で過去の話題振ってるんじゃない?w
ほっときゃ朝には飽きるよきっと
59デフォルトの名無しさん:2007/05/27(日) 03:10:17
連鎖あぼーんってJaneで設定できる?
60デフォルトの名無しさん:2007/05/27(日) 03:25:12
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
マス目1辺の数xと、各行と各列の黒いマスの個数が条件として
ファイルで与えられたとき、この条件を満たすマス目のパターンの
個数を求め、全パターンを表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 最終期限は6月17日までです。
[5] その他の制限:
とりあえず、ファイルを読み込み配列に格納する関数と、画面にパターンを
出力する関数は出来ているので、メインとなるパターンの個数を求める関数の
大まかな手順というかアルゴリズムを考えられるだけ教えて頂けると助かりま
す。プログラム自体は自分で考えようと思ってます。
現段階では総当たりしか思いつかないので、総当たり以外で何かあれば、
教えて下さい。
61デフォルトの名無しさん:2007/05/27(日) 03:34:37
>>60
ちょっと考えてみたけど、総当たりぐらいしか思い付かんな
一つだけ見つけりゃいいってなら、ひょっとしたら何かやり方もありそうだが全部だしな
後は分枝限定法で無駄を省くぐらいしか無いんじゃね?
62デフォルトの名無しさん:2007/05/27(日) 04:10:14
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
「与えられた2つのプログラムを1つにしなさい」
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C

1つめのプログラム
main()
{
#include <stdio.h>
double max, min, data;
int i, n;
FILE *fp;
if ((fp = fopen ("foobar.txt", \
"r")) == NULL)
{
printf ("file not found");
exit (1);
}
fscanf (fp, "%d", &n);
if (fscanf (fp, "%lf", &data) \
! = EOF)
{
i = 1;
max = data;
min = data;
63デフォルトの名無しさん:2007/05/27(日) 04:11:27
while (fscanf (fp, "%lf", &data) != EOF)
{
i = i + 1;
if (data > max)
{max=data;}
else if (data >= min)
{}
else
{min = data;}
}
printf ("n = %d 最大値 =%f \
最小値 = %f", i, max, min);
if (i !=n)
{printf (" 数が合いません n= %d \
i=%d", n, i);}
}
else
{printf (" 数値がありません");}
fclose (fp);
}
6462:2007/05/27(日) 04:12:45
2つ目のプログラム

main()
{
#include <stdio.h>
double max, min, data;
int i, n;
FILE *fp2;
if ((fp2 = fopen ("fooout.txt"), \
"w")) == NULL)
{
printf("file open error");
exit(1);
}
scanf ("%d", &n);
if (scanf ("%lf", &data) \
!= EOF
{
i = 1;
max = data;
min = data;
while (scanf ("%lf", &data) != EOF)
{
i = i + 1;
if (data > max)
{max = data;}
else if (data >= min)
{}
else
{min = data;}
}
6562:2007/05/27(日) 04:14:34
fprintf (fp2,"n = %d 最大値 = %f \
最小値=%f",i,max,min);
if (i != n)
{fprintf (fp2," 数が合いません n= %d \
i=%d" , n, i);}
}
else
{fprintf (fp2," 数値がありません");}
fclose (fp2);
}

上記は入力と出力のプログラムで、それらを一つにしろということだと思うのですが、どこに手を入れたら良いのかわからず
連レスすみません。よろしくお願いします。
66デフォルトの名無しさん:2007/05/27(日) 04:16:22
main()
{
#include <stdio.h>

ちょっwwwwwwwwwおまっwwwwwwwww これ無理wwwwwww
しかも所々、改行されているところに \ が入っているしwwwwww
これ、UNIXでmuleでも使って入力したんかい?
67デフォルトの名無しさん:2007/05/27(日) 04:18:24
っつか、無理かと思ったがBCCでmain関数の中にstdio.hインクルードが通ったwwwwすげっwwww
68デフォルトの名無しさん:2007/05/27(日) 04:31:53
>>67
includeディレクティブはソースを引用するだけだから、関数内でできないことが書かれていない限りエラーにはならない。
また、改行文字をエスケープ文字でエスケープしてもそれは単に無視される。

勿論、一般的には間違いだが。
69デフォルトの名無しさん:2007/05/27(日) 04:41:03
>>68
改行についてはprintfの""の中で使うやつじゃなくて、単に行の端にある
\ の部分について。例えば
if ((fp2 = fopen ("fooout.txt"), \
if (scanf ("%lf", &data) \
この一番右にあるみょうちくりんなやつ。
includeについては確かにそれ自身もソースの一部だから、適当な場所にありゃ良いというか
おそらくstdio.hの中に記述されているライブラリや定義を使う分の上にありゃ問題ないかもね。
70デフォルトの名無しさん:2007/05/27(日) 04:44:24
>>62
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4088.c
とりあえずまとめてみたけど・・・これで良いんか?w
71デフォルトの名無しさん:2007/05/27(日) 05:06:02
>>60
>マス目1辺の数xと、各行と各列の黒いマスの個数
これって、
 1 0
1□□
1□□ (条件)

■□
□■ (解:1個)

ってこと?凄い面倒くさそうなんだけど・・・。
72デフォルトの名無しさん:2007/05/27(日) 05:08:52
>>71 2列目は0でそのパターンはありえない。っつーか、ピクロスみたいなやつだとしたら
ちと面倒だな。まぁ、それを解くプログラムとして使うのかもしれんが、っと推測してみる。
73デフォルトの名無しさん:2007/05/27(日) 05:15:42
ああ、よく見たら解なしかw むずいわぁ。
74デフォルトの名無しさん:2007/05/27(日) 06:31:14
実際に出来上がった塗りつぶしありなしのマス目から、各行と列の数値を書き出す
スクリプトなら書いたことはあるが、その逆の各行の数値からパターンを書き出すのは
やったことないなぁ・・・俺はパス。戯言ですまそ。
75デフォルトの名無しさん:2007/05/27(日) 06:50:17
>>60
一辺の長さがnで、各行各列の黒マスの個数が全て1のときを考えると、解はn!個ある。
よって、最悪の場合に指数的な時間が掛かることは避けようがないので、なんらかの総当たりが必要。
76デフォルトの名無しさん:2007/05/27(日) 11:15:24
>>43さん
亀レスで申し訳ありません。
正方形限定です。このいっぺんの大きさをnとして
オーダーがn^2以下になるようにする必要があります。
また、テキストには01\n以外の文字は無いと仮定して大丈夫です。
77デフォルトの名無しさん:2007/05/27(日) 11:19:20
>なんらかの総当たり

はぁ?一番時間がかかるだろ総当りは...
78デフォルトの名無しさん:2007/05/27(日) 11:30:40
>>77
だから解くのに時間がかかる問題だと言ってるんだが。
もちろん、愚直な総当たりしか方法がないと言ってる訳じゃない。
枝刈りしながら左上から埋めていくだけでも相当速くなるだろう。
それでも総当たりには変わりない。
79デフォルトの名無しさん:2007/05/27(日) 11:32:23
枝刈りしたら総当りじゃないんだよ。
80デフォルトの名無しさん:2007/05/27(日) 11:36:38
>62

入力プログラムの入力ファイル"foobar.txt"から、出力プログラムの出力ファイル"fooout.txt"へ出力するプログラムにしろ、ってことかな?
81デフォルトの名無しさん:2007/05/27(日) 11:38:59
>>79
そうなの?ソースある?
82緊急支援要請 ◆helpMe.UEE :2007/05/27(日) 11:47:14
2位以下に圧倒的大差をつけ独走していた日本。
だが…

“突然の終了” “カウントのリセット” “新ルールの導入”

逆境に挫けず再び0から走り出した日本であったが、その前に立ちはだかった新たなる壁、ハンガリー。
彼らの投入した謎の新兵器により、日本はとうとう首位から転落してしまった。
ひとたび彼らが全力を出せば、現在の戦力のままでは太刀打ちできない。
首位の奪還・死守、そして総合優勝のためには、貴様らの参戦が必要不可欠である。

日本の力を世界に知らしめるため…

今一度集え、戦士たちよ!!

─── 一番クリックした国が優勝 ───
http://wwwww.2ch.net/test/read.cgi/news4vip/1180217014/
83デフォルトの名無しさん:2007/05/27(日) 12:00:28
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):

Nbit同士の2進数表記の値を入力して結果を筆算表記で印字せよ。
ただし1度10進数に変換してはならない。
また最低16bit同士の演算ができるようにすること。


          000011
       x  001101
        ---------
          000011
         000000
         000011
        000011
       ----------
        000100111

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
8483:2007/05/27(日) 12:03:24
自分なりに
#include <stdio.h>

void main()
{
unsigned int a,b,c;
c = 0;
scanf("%d %d",&a,&b);

while(b!=0){
if(b&1) c+=a;
a=a<<1;
b=b>>1;
}
printf("%d\n",c);
}

シフトを使った一般的な乗算のアルゴリズムを作ったのですが
桁上がりの判定ができていないし、筆算表記もさっぱりです。
どうか力をお貸し下さい。

[4] 期限: 5月27日24時
85デフォルトの名無しさん:2007/05/27(日) 12:12:57
>>77
日本語でおk?っつか日本語分からないなら消えろ
86デフォルトの名無しさん:2007/05/27(日) 12:22:19
>>81
79とは別人だし、ソース無いけど。
総当りって「全ての状況を評価して答えを出す」方法だと思うんだが。
枝刈りしちゃうと「評価されない状態」が出てくるわけで、
総当りとは言えないんじゃない?

と思ったんだけど「総当り法」という方法を現す言葉があって、
『「分枝限定法(これが枝刈り?)」は「総当り法」に含まれる』
という記述が幾つかネットで見つかったので、
用語的には俺が間違えているのかも知れぬー。
よく分からぬー。
87デフォルトの名無しさん:2007/05/27(日) 12:29:14
>>82
>ただし1度10進数に変換してはならない。
ここの意味が分からない。
int使って計算したらダメってことか?

意味分からん。
intは10進数じゃないと思うんだが。
でも「表示で10進数使ってヤレ」言われても使いようが無いし。

なんか前も16進で似たような問題あったな・・・。
88デフォルトの名無しさん:2007/05/27(日) 12:35:01
安価ミスに吹いた
89デフォルトの名無しさん:2007/05/27(日) 12:37:29
す、すまん・・・orz
>>87の安価は>>83の間違い・・・。
9083:2007/05/27(日) 12:37:30
>>87
説明不足すみません。
>ただし1度10進数に変換してはならない。
これは一旦入力した2つの2進数を10進数に変換して計算し、
最後に2進数へ変換してはならないという事です。

また2つの2進数は符号なしである事を付け忘れていました。
91デフォルトの名無しさん:2007/05/27(日) 12:37:34
漏れも。そして分からないならスルーすりゃ良いじゃんって感じ・・・日ごろまともに相手にされていない
人間がとる特徴的な行動、言動だなw
92デフォルトの名無しさん:2007/05/27(日) 13:12:02
>83
aとbの入力のとこは自分でなんとかして。
#include <stdio.h>
#include <string.h>
int main(void)
{
char a[] = "11", b[] = "11", c[32] = {0};
int i, j;
int n = strlen(a);
for(i=0; i<n; i++) putchar(' ');
puts(b);
for(i=0; i<n-1; i++) putchar(' ');
putchar('*');
puts(a);
for(i=2*n; i>0; i--) putchar('-');
putchar('\n');
for(i=0; i<n; i++) {
for(j=0; j<n-i; j++) putchar(' ');
for(j=0; j<n; j++) {
putchar(((a[n-1-i]-'0')&(b[j]-'0'))+'0');
c[i+j] += (a[n-1-i]-'0')&(b[n-1-j] - '0');
if(c[i+j]/2) {
c[i+j+1] += c[i+j]/2;
c[i+j] %= 2;
}
}
putchar('\n');
}
for(i=2*n; i>0; i--) putchar('-');
putchar('\n');
for(i=2*n-1; i>=0; i--) printf("%d", c[i]);
}
93デフォルトの名無しさん:2007/05/27(日) 13:44:40
>>90
きみの説明不足というより、
おそらく出題者が進数の意味を分かってないな。
単位が欲しけりゃ、こういうアフォな出題者の意図を汲む力が必要。
今回の場合、
「10進数に変換するな」 = 「intに変換するな」
というのが出題者の意図で、
それを見抜けずにintを使っちゃったら×にされてしまうよ。
94デフォルトの名無しさん:2007/05/27(日) 13:49:19
すみません
>>45 もよろしくお願いします
95デフォルトの名無しさん:2007/05/27(日) 14:08:26
>>93
int型の意味を理解していないことを露呈しなくて良いから、口を塞いで・・・じゃなくて
キーボードから指を離せ。
96デフォルトの名無しさん:2007/05/27(日) 14:16:10
ケンカしないで><
97デフォルトの名無しさん:2007/05/27(日) 14:21:47
要するに、000011を3、001101を13に変換して、3と13を使って計算するんじゃなくて
>>83にある、0と1(2進数)のまま各桁を筆算しろってことだろ。
int型変数に1と0を入れて計算するなってことじゃないだろ。
http://ja.wikipedia.org/wiki/%E5%8D%81%E9%80%B2%E8%A8%98%E6%95%B0%E6%B3%95
http://ja.wikipedia.org/wiki/%E7%AD%86%E7%AE%97
ちゃんと事実関係を調べてからものを言えって。恥かくぞ、ゆとり世代。
98デフォルトの名無しさん:2007/05/27(日) 14:22:02
>>93の言ってることはまともだと思うが。
99デフォルトの名無しさん:2007/05/27(日) 14:22:18
前スレ>>482で出した課題で、前スレ>>690で解答してもらったんですが
C++言語のところC言語で解答されてて、ある程度C++に文法は変えたんですけど
この下記のプログラムだけが(3行目)分からなくて、これをc++に変えた場合
printf("\n質問\nC言語好き?\n");
scanf("%d",&ch);
printf("%s\n", ch==1? "好きなら上達も速いわ頑張って!" : "そう、別に意味は無いのよただ聞いてみただけ");
どうプログラムなるか教えてください。
100デフォルトの名無しさん:2007/05/27(日) 14:23:00
>>98 自演自己擁護乙。
> 「10進数に変換するな」 = 「intに変換するな」
意味が通じないんですけどぉ〜〜?
10198:2007/05/27(日) 14:26:29
>>100
自演じゃないよ。

> 「10進数に変換するな」 = 「intに変換するな」
>意味が通じないんですけどぉ〜〜?

>>93は、「出題者は、「10進数に変換するな」という言葉を「intに変換するな」という意味で使っている」という指摘をしたんだろ。
102デフォルトの名無しさん:2007/05/27(日) 14:27:32
>>101
それをお前もそう思うなら相当なあほだ。口を閉じてろ。
103デフォルトの名無しさん:2007/05/27(日) 14:30:04
だいたい >>83 にすでに計算過程の例が出てんだろ。10進数に変換して計算ってのは
 3
x13
でやる形にするなってことだろ。
104デフォルトの名無しさん:2007/05/27(日) 14:31:41
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
指定したテキストファイルを読み込み、重複した数字を削除したものを
指定したテキストファイルに出力するプログラムを作りなさい。

読み込むファイルは
154646
467687
468767
154646
のように1行に1数字で1万行ほど書いてあります。
[3] 環境
 [3.1] winXP
 [3.2] コンパイラ名とバージョン: Visual Studio
 [3.3] 言語: C++
105デフォルトの名無しさん:2007/05/27(日) 14:33:03
>>103
そうも読めないことはないけど、>>93の解釈の方が自然だろ。
その形にしたって扱いやすいことは何もないんだから。
106デフォルトの名無しさん:2007/05/27(日) 14:40:41
>>44お願いします。
107デフォルトの名無しさん:2007/05/27(日) 14:44:58
タートルグラフィックライブラリとかいうの白根
108デフォルトの名無しさん:2007/05/27(日) 15:02:50
>重複した数字
>1行に1数字
kwsk

先の行に現れたものとダブっている後に現れた行は出力しない、ってこと?
109デフォルトの名無しさん:2007/05/27(日) 15:03:52
文字列配列の動的確保はどのようにすればいいのでしょうか?
文字列の長さはどうでもいいのですが、文字列の個数を任意の数にしたいのですが。
110デフォルトの名無しさん:2007/05/27(日) 15:05:37
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
キーボードから入力した3桁の数字がぞろ目であるか判定するプログラムの作成。

ぞろ目かどうかを判断する関数 int is_zorome(int n) を定義する。関数int is_zorome(int n) は,n がぞろ目のとき1を戻し,n がぞろ目でないとき0を戻す関数。
入力する数字は、100以上999以下に限定。

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

どなたかお願いします。
111気まぐれアナスイ:2007/05/27(日) 15:09:34
fbc cat
112104:2007/05/27(日) 15:10:13
>>108
簡単な例で示すとテキストファイルに
1
2
2
5
4
4
3
5
の用に記述されていて、それを読み込んで
1
2
5
4
3
のようなテキストを出力するようなプログラム
(実際はもっと大きな数で、1万行くらいある)

>先の行に現れたものとダブっている後に現れた行は出力しない、ってこと?
そんな感じ
113デフォルトの名無しさん:2007/05/27(日) 15:11:47
114デフォルトの名無しさん:2007/05/27(日) 15:20:48
int is_zorome(int n)
{
int a[] = { n % 10, n / 10 % 10, n / 100}, i;
if (n < 100 || n > 999)
return 0;
for (i = 1; i < 3 && a[0] == a[i]; i++);
return i == 3 ? 1 : 0;
}
115デフォルトの名無しさん:2007/05/27(日) 15:21:22
>>112 こんなん?

#include<iostream>
#include <fstream>
#include<vector>
#include<algorithm>
using namespace std;

fstream outputFile("output.txt",ios::out);

void print(const int i){
outputFile << i << std::endl;
}

int main(void){
if(outputFile.fail()) return 1;
fstream inputFile("input.txt",ios::in);
if(inputFile.fail()) return 1;
vector<int> v;
while(!inputFile.eof()){
int i;
inputFile >> i;
vector<int>::iterator it=find(v.begin(),v.end(),i);
if(it==v.end()) v.push_back(i);
}
for_each(v.begin(),v.end(),print);
return 0;
}
11662:2007/05/27(日) 15:23:11
お答えいただきありがとうございました。
答え以外にも勉強になる考え方を教えていただき大変参考になりました。

>>80
亀レスですが、そういうことです。
11745:2007/05/27(日) 15:39:18
>>113
お力添え、どうもありがとうございます
あとは自分でやってみますね
118デフォルトの名無しさん:2007/05/27(日) 15:40:56
119気まぐれアナスイ:2007/05/27(日) 15:44:34
!(-_Φ+)
定義は制限無く論議できる物です。
考える事は素晴らしいです。
全てに対して有効なdata.を創るのは、理解が必要と改めて思いました。
120デフォルトの名無しさん:2007/05/27(日) 15:45:35
>>110
#include <stdio.h>

int is_zorome(int n){
char buf[ 3+1], c;
int i;
if(n < 100 || n > 999) return 2;
sprintf(buf, "%d", n);
for(i=1; i<3; i++){
if(buf[0] != buf[i]) return 1;
}
return 0;
}

int main(void){
int n;
scanf("%d", &n);
switch(is_zorome(n)){
case 0: puts("ぞろ目"); break;
case 1: puts("ぞろ目違う"); break;
case 2: puts("3桁がいいなぁ"); break;
}
return 0;
}
121気まぐれアナスイ:2007/05/27(日) 15:47:29
>>118
!(Φ_Φ+){閲覧できますが?}
122104:2007/05/27(日) 15:48:51
>>115
動かしてみたのですが、処理が遅すぎて終わりませんでした。

>>118
結果が表示されませんでした。


>>112では簡単な例で数字を出しましたが、実際に読んでいる数は
201032610121
221933098595
201032538484
222434513975
221933386002
221933386002
232236892105
232236376166
222434623109
232236376166
232234455416
202134063179
202134063179
のような数字です。
123118:2007/05/27(日) 16:11:48
>>122
intの範囲に収まるものと仮定していたので修正。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4092.cpp11
124デフォルトの名無しさん:2007/05/27(日) 16:16:48
12560:2007/05/27(日) 16:26:11
皆さんレスありがとうございます。
やはり、なかなか難しいんですね。
ちなみにマス目1辺の数xは、最大でも7で動作すれば良いらしいです。
最低限4では動作しないとダメだということでした。
126104:2007/05/27(日) 16:29:15
>>124
無事に動きました。ありがとうございました。
127デフォルトの名無しさん:2007/05/27(日) 16:36:07
夕張市民涙目wwwww
田舎者は一般的にだらしがない。
視野が狭い。想像力が無い。排他的。
独創的な発想をすぐ潰しにかかる。
いまだに車必須って何だよwww効率悪いだけじゃんwww
夕張再建あきらめろ。全員死ね田舎者。見ててむかつく
128デフォルトの名無しさん:2007/05/27(日) 16:37:47
>>44
再帰関数作った。mainはやる気無し。とりあえず3回折。
ライブラリの使い方あってるかどうかは知らん。

#include "turtle.h"
#include "winlib.h"
void dragon(int n, double xi, double yi, double xf, double yf){
 double xm,ym,dx,dy;
 if(n==0){g_line(xi,yi,xf,yf);return;}
 dx=xf-xi;dy=yf-yi;
 xm=xi+(dx-dy)/2;ym=yi+(dx+dy)/2;
 dragon(n-1,xi,yi,xm,ym);dragon(n-1,xf,yf,xm,ym);
}
void main(){initwin();dragon(3,100,200,100);}
129127:2007/05/27(日) 16:46:23
ごめん誤爆ったorz
130デフォルトの名無しさん:2007/05/27(日) 17:02:58
>>104
やってみた。C++といえるかどうかは微妙…
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4093.c
131デフォルトの名無しさん:2007/05/27(日) 17:43:50
前スレ711です。どなたかお願いしますorz

[1] 授業単元:IT入門B1 C言語
[2] 問題文
二次関数(y = a x^2+ bx +c)でxがx1 <= x <= x2のときの最大値と最小値(そのときのxの値も含めて)を求めるプログラムを作成せよ。
ここでa,b,cは整数、x1,x2は浮動小数とする。
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc versionは不明ですが最新版のはずです
 [3.3] 言語:C
[4] 期限: 2007年5月28日0:00まで
[5] その他の制限: 特にありません。
132デフォルトの名無しさん:2007/05/27(日) 17:45:54
>>104
こんなもんでいいんじゃねぇの。

#include <iostream>
#include <set>
using namespace std;
int main()
{
    string line;
    set<string> seen;
    while (getline(cin, line)) {
        if (seen.find(line) == seen.end()) {
            cout << line << '\n';
            seen.insert(line);
        }
    }
    return 0;
}
133デフォルトの名無しさん:2007/05/27(日) 17:47:51
>>131
前すれ993に回答が出ていたが。
13413:2007/05/27(日) 19:03:41
>>48
すいません、ごり押しで問題2も解いてもらえないでしょうか?
お願いします
135デフォルトの名無しさん:2007/05/27(日) 19:26:06
[1] 授業単元:プログラミング方法論
[2] 問題文(含コード&リンク):迷路を横型探索と縦型探索で解くプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C++
[4] 期限:2007年5月31日17:00まで
[5] その他の制限:特になし。

 よろしくお願いします。
136気まぐれアナスイ:2007/05/27(日) 20:00:07
>>122 -112
導き出すのに大分時間が掛かりましたが…
正直な処、驚きました。
137気まぐれアナスイ:2007/05/27(日) 20:04:31
一部です。

「fi ibi i」
138デフォルトの名無しさん:2007/05/27(日) 20:04:59
質問貼り付けました。どなたかお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4097.txt
139デフォルトの名無しさん:2007/05/27(日) 20:07:36
すみません>>41をどなたかお願いできないでしょうか。
ファイルを少し修正しました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4098.txt
お願いします。
140気まぐれアナスイ:2007/05/27(日) 20:09:08
途中で気が附かなくてはならない事がありますが…
141デフォルトの名無しさん:2007/05/27(日) 20:19:40
>>134
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4099.txt
外部変数まで使った手抜きコードで悪いが、
その辺気にいらなきゃ引数でも使うように変更してくれ。

一応ソレっぽい値は出てるように見えるけど、
出力が正しいかどうかは手計算なりして確かめてみてちょうだい。
ログのFとUでジョブとプログラムのオンな時間を計算してるから、
ソレを全部出力したら参考になるかもね。
142デフォルトの名無しさん:2007/05/27(日) 20:51:55
143デフォルトの名無しさん:2007/05/27(日) 21:18:50
>>138
#include <iostream>
#include <fstream>
#include <string>
#include <map>
using namespace std;
int main(int argc, char **argv)
{
  if (argc != 4)
    return cerr << "usage: " << argv[0] << " FILE1 FILE2 FILE3\n", 1;
  ifstream file1(argv[1]), file2(argv[2]);
  ofstream file3(argv[3]);
  if (!file1 || !file2 || !file3)
    return cerr << "can't open file" << endl, 2;
  map<string, string> selection;
  map<string, string>::iterator mi;
  string s1, s2;
  while (file2 >> s1 >> s2)
    if ((mi = selection.find(s1)) != selection.end())
      mi->second += ",", mi->second += s2;
    else selection[s1] = s2;
  while (getline(file1, s1)) {
    if ((mi = selection.find(s1)) != selection.end())
      file3 << mi->second;
    file3 << '\n';
  }
  return 0;
}
144デフォルトの名無しさん:2007/05/27(日) 21:26:44
プログラムを作成し、Makefileを作成する課題です。
プログラムはクイックソートなんですが、
mainと関数部分を同じファイルに書いた場合は正常にコンパイル、動作したので、


main部分を main.c
関数部分を quick.c

で保存、
Makefileを作成し
% make
で実行したところ

gcc -o q-sort -O main.o quick.o -lm
quick.o: In function `main':
quick.c:(.text+0x15): multiple definition of `main'
make.o:make.c:(.text+0x0): first defined here
collect2: ld returned 1 exit status
make: *** [q-sort] エラー 1

となり、コンパイルできませんでした。

main関数はmain.c以外の場所にはないのですが・・・

解決方法を教えていただけないでしょうか?

よろしくおねがいします。
145デフォルトの名無しさん:2007/05/27(日) 21:29:32
>>144
メッセージからするとmake.cをコンパイルして出来たmake.oとやらと
リンクしようとしてエラーになっとるようだが?
146144:2007/05/27(日) 21:34:34
Makefileの中身です。



CC = gcc
CFLAGS = -O
LDFLAGS = -lm
OBJECTS = make.o quick.o

q-sort: $(OBJECTS)
$(CC) -o q-sort $(CFLAGS) $(OBJECTS) $(LDFLAGS)

clean:
rm -f *.o *~
147デフォルトの名無しさん:2007/05/27(日) 21:37:08
なんかサフィックスルール、抜けてないか?
cleanしてからmakeしてみ。
148デフォルトの名無しさん:2007/05/27(日) 21:37:29
で、>>144によればキミはmake.cではなくmain.cというソースにしたのでは
なかったのかな?ただのtypo?
149デフォルトの名無しさん:2007/05/27(日) 21:38:52
>>144
エラーをそのまま解釈すると、
quick.cの中にもmain関数があるんじゃないかね。
150デフォルトの名無しさん:2007/05/27(日) 21:42:21
あ、もしかして、quick.cのなかで
#include "main.c"
とかしてないか?
調べ方だが
nm quick.o
してみて
T mainとでたらquick.oの中にmain関数が含まれてる
U mainとでたら含まれてない

151デフォルトの名無しさん:2007/05/27(日) 21:43:23
>>150
> #include "main.c"
すげぇエスパーだなw
15213:2007/05/27(日) 21:45:45
>>141
ありがとうございます、気に入らないなんてとんでもないです
本当に助かりました。
153144:2007/05/27(日) 21:58:34
>>147
% make clean
rm -f *.o *~
% make
gcc -O -c -o main.o main.c
gcc -O -c -o quick.o quick.c
gcc -o q-sort -O main.o quick.o -lm
quick.o: In function `main':
quick.c:(.text+0x15): multiple definition of `main'
main.o:main.c:(.text+0x0): first defined here
collect2: ld returned 1 exit status
make: *** [q-sort] エラー 1



>>150
T main でした
154144:2007/05/27(日) 22:00:13
quick.cの中を調べてみました。

一度quick.cでつくって、バラしたはずだったのですが、
複数起動していたみたいで、うまく消した後が削除できていませんでした。

無事解決しました。

ありがとうございました
155144:2007/05/27(日) 22:05:53
もう一つ質問なのですが、
最初自分でクイックソートを書いたのですが、うまくソートされませんでした。

ソースを見て紙に一つずつ書きながらやってみると、確かにうまく出来なさそうな気がするのですが
いまいちぱっとしません。

もしよろしければ、修正ポイントなど教えていただけないでしょうか。
--------
#include<stdlib.h> #include<stdio.h> #define SIZE 10
int S[SIZE];
void quick(int S[],int from,int to) {
int i,j,k,l,pivot;
if(from<to) { pivot=from; i=from+1; j=to;
if(i!=j) { while(i<j) {
if(S[i]>S[pivot]) {
while(S[j]>S[pivot]) { j--; }
if(S[j]<S[pivot]) {
swap (&S[i],&S[j]);
j--; i++; }
else { i--; } }
else{ i++; } }
swap (&S[i],&S[pivot]); }
else { if(S[pivot]>S[i]) {
swap (&S[i],&S[pivot]); } }
quick(S,from,i-1); quick(S,j+1,to); } }
---------
mainとswapは省略してます

最終的には書籍に載っていたサンプルソースで実装しました・・・
156155:2007/05/27(日) 22:11:06
改行を減らしたら、見づらいソースになってしまいました。 すいません。
157デフォルトの名無しさん:2007/05/27(日) 23:23:11
>>99 お願いします
158デフォルトの名無しさん:2007/05/27(日) 23:28:31
[1] 授業単元:
[2] 問題文(含コード&リンク):

ある西暦年が「うるう年」かどうかは、次のように判別する。
4の倍数なら「うるう年」である
ただし、4の倍数であっても、100の倍数なら「うるう年」ではない
さらに、100の倍数でも、400の倍数なら「うるう年」である
西暦2000年はうるう年?2100年は?
ある西暦年がうるう年かどうかを判別する条件判断文を書け。

[3] 環境
 [3.1] OS: xp
 [3.2] visual studio 2005
 [3.3] 言語: C
[4] 期限: 明日の朝までにお願いします
[5] その他の制限: 特になし
159デフォルトの名無しさん:2007/05/27(日) 23:32:48
>>157
#include <iostream>
using namespace std;
int main()
{
int ch;
cout << "\n質問\nC言語好き?\n";
cin >> ch;
ch==1? cout << "好きなら上達も速いわ頑張って!" : cout <<"そう、別に意味は無いのよただ聞いてみただけ";
return 0;
}
160デフォルトの名無しさん:2007/05/27(日) 23:35:41
前スレ711です。
前スレ993さんありがとう!
161デフォルトの名無しさん:2007/05/27(日) 23:37:50
>>158
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int y;
char buf[32];
printf("Input year > ");
fgets(buf,sizeof(buf)/sizeof(buf[0]),stdin);
y=atoi(buf);
if(y<=1582) return 1;
if( (y%4==0 && y%100!=0) || y%400==0 )
fprintf(stdout,"%dはうるう年\n",y);
else fprintf(stdout,"%dは平年\n",y);
return 0;
}
162かも:2007/05/27(日) 23:39:58
ニューメリカルレシピインシーって本やったことありますか???
163デフォルトの名無しさん:2007/05/27(日) 23:44:31
ニューメキシコ州、の近くになら行った事あります。
164デフォルトの名無しさん:2007/05/27(日) 23:46:55
165デフォルトの名無しさん:2007/05/28(月) 00:30:41
>>162
持ってるし、実際に使ったこともあるよ。
良い本だと思うけど、数年前はNETLIBにおされて、いろいろと物議をかもしだしてるね。
http://nakano.webmasters.gr.jp/nr.html
を見るとよいかも。
166デフォルトの名無しさん:2007/05/28(月) 02:41:24
>>155
なんとかやりたいことは分かったと思う。
まずピポットの位置をfromに固定して、
ピポットより右〜toまでをピポットより小さい数を左に、大きい数を右にする。
で、並び終わったら、ピポットの数値をその間に入れたい、と。
コレの再帰による繰り返しでソートしたいように見える。

さてまず。
while(S[j]>S[pivot]){ j--; }
このループでiとjの大小を考えてないから、ループ回ってる間にiより小さくなって、
既に小さい順に並んでる数値を変なところと入れ替えてしまってる。

次に、ピポットをそれより小さい値の一番右とスワップするところだけど、
if(S[i]>S[pivot]){
これで、常にiがピポットより大きい値を指しているので、
そのままスワップすると、スワップ後にピポットより大きい値が左に来てしまう。

最後に、これはしっかり確かめたわけではないけど、
同じ大きさの数値が2つ以上存在する時のことが考えられて無いように見えた。
167デフォルトの名無しさん:2007/05/28(月) 02:45:11
フツーにピボット書き間違えてる。
眠気のせいにしといて。お願いします。
16860:2007/05/28(月) 03:39:14
総当たりでも何とかいけそうなんで、総当たりで普通にやろうと思います。
お騒がせしました。
169デフォルトの名無しさん:2007/05/28(月) 03:43:01
>>168
何とかというか、(枝狩りとかの違いはあるにしても)総当たりしか無いと思うぞ
全部列挙じゃなくて1つだけってのとは違うからな
170デフォルトの名無しさん:2007/05/28(月) 03:43:56
>>60

マスの個数しか与えられないのか・・・
ピクロスの方が実装簡単そうだな
やっぱ総当りなのかな
http://www2.fctv.ne.jp/~susuki/kou-pic.htm
171デフォルトの名無しさん:2007/05/28(月) 06:03:58
[1] 授業単元:
[2] 問題文:

stringを使い、
"A" が "AB" に変わり、"B" が"A" に変わる文字列で、
出力結果が、
n=0 A
n=1 AB
n=2 ABA
n=3 ABAAB

となるようなプログラム

[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:Visual C++ 2005
 [3.3] 言語:C++
[4] 期限:年05月30日
[5] その他の制限:なし

お願いします
172デフォルトの名無しさん:2007/05/28(月) 08:07:21
問題:次の条件を満たす関数 dispArray() を作りなさい。

入力は整数型のポインタ
入力されたポインタに対して、順に格納されている正の整数を 10 個ずつで改行しながら表示する。
入力の参照先に -1 が入っていたら終了する

使用言語:CまたはC++
173デフォルトの名無しさん:2007/05/28(月) 08:14:27
void dispArray(int *p)
{
   int i;
   for(i=0; p[i]!=-1; i++) {
      printf("%d ", p[i]);
      if(i%10==9) putchar('\n');
   }
}
174デフォルトの名無しさん:2007/05/28(月) 08:14:59
>>172
次からは>>1読んでちゃんとテンプレ埋めろよ
void dispArray(int *array){
int *i = array;
while(*i != -1){
printf("%d",*i++);
if((i-array)%10==0) printf("\n");
}
}
とりあえずC言語で。
175デフォルトの名無しさん:2007/05/28(月) 08:19:19
174 名前:デフォルトの名無しさん 投稿日:2007/05/28(月) 08:14:59
>>172
次からは>>1読んでちゃんとテンプレ埋めろよ
176デフォルトの名無しさん:2007/05/28(月) 08:28:56
>>171
出力結果はできた。問題の意味がよくわからんので合ってるか知らん

#include <iostream>
#include <sstream>

using std::cout;
using std::endl;
using std::string;
using std::ostringstream;

static const int LOOP = 4;
static char* abc[] = {"A", "B", "A", "AB"};

int main()
{
ostringstream sout;

for (int i = 0; i < LOOP; i++) {
char* str = abc[i % 4];
sout << str;
cout << "n=" << i << " " << sout.str() << endl;
}

return 0;
}
177デフォルトの名無しさん:2007/05/28(月) 08:56:15
n=4ならABAABABAじゃね?
178デフォルトの名無しさん:2007/05/28(月) 09:07:02
フィボナッチっぽいね
179デフォルトの名無しさん:2007/05/28(月) 09:38:11
>171
C++が分からんのでCだけどなんかの参考にでもなれば
#include <stdio.h>
void f(int n)
{
if(n==0) printf("A");
else if(n==1) printf("AB");
else {
f(n-1);
f(n-2);
}
}
int main(void)
{
int i, n;

scanf("%d", &n);

for(i=0; i<n; i++) {
printf("n = %d ", i);
f(i);
putchar('\n');
}
return 0;
}
180デフォルトの名無しさん:2007/05/28(月) 10:18:55
[2] 問題文(含コード&リンク):
学生が朝8時x分に起きて出発しすると8時y分に大学に着くとしよう.講義に間に合うならば自転車で大学に行きたいが,
自転車では間に合わない場合はタクシーを利用せざるを得ない.起きた時刻を入力すると,起きた時刻,利用すべき交通手段と
到着予定時刻が表示されるプログラムを作成せよ.
出力結果
10←入力
wake up time = 8:10
arrival time = 8:40 by bicycle
________
52
wake up time = 8:52
arrival time = 8:59 by taxi
________
58
wake up time = 8:58
ryunen
___________
68
error
[3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C
[5] その他の制限:プログラム名は「arrival」とすること.
プログラム中の入力,出力の値は整数型の変数を宣言して扱うこと(小数点以下は切捨てる).
入力された値が,0未満,60以上の場合は,errorと表示させる.
時刻の分の表示は2桁の整数とする.例えば8時2分のように一桁の時刻の場合は8:02のように2の前に10の位の0を加えること.
大学までの道のりは5kmとする. タクシーの平均速度は40km/hとする. 自転車の平均速度は10km/hとする.
起きると同時にタクシーや自転車で出発可能であるとする.
自転車やタクシーが9時前に到着すれば講義に間に合うとする(9時に到着では間に合わない).
タクシーでも間に合わない時刻に起きてしまった場合は"ryunen"と表示させる.
よろしくお願いします。
181デフォルトの名無しさん:2007/05/28(月) 10:43:58
#include <stdio.h>
int main(void)
{
  int n;
  int taxi, bicycle;
  taxi = 60 * 5 / 40;
  bicycle = 60 * 5 / 10;
  scanf("%d", &n);
  while(n>=0 && n<60) {
    printf("wake up time = 8:%02d\n", n);
    if(n+taxi >=60) printf("ryunen\n");
    else if(n+bicycle>=60) printf("arrival time = 8:%02d by taxi\n", n + taxi);
    else printf("arrival time = 8:%02d by bicycle\n", n + bicycle);
    printf("________\n");
    scanf("%d", &n);
  }
  printf("error\n");
  return 0;
}
182デフォルトの名無しさん:2007/05/28(月) 10:48:19
>>181

めっちゃはやくといてくれてありがとうございます!
183デフォルトの名無しさん:2007/05/28(月) 12:01:29
C/C++の宿題を片付けます 87代目の947です。
ありがとうございました。
184デフォルトの名無しさん:2007/05/28(月) 16:26:33
[1] 授業単元:
[2] 問題文(含コード&リンク):

an=(1+1/n)~n数列の第n項目までの値を表示するプログラム

./progression
n=? 5
n=1 2.00
n=2 2.25
n=3 2.37
n=4 2.44
n=5 2.49

[3] 環境
 [3.1] OS:linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限:
[5] その他の制限: 小数点以下2桁までの表示です。
どなたかよろしくおねがいします。
185デフォルトの名無しさん:2007/05/28(月) 16:35:57
>>184
#include <stdio.h>
#include <math.h>

int main(void){
    int n, n_max;

    printf("n=? ");
    scanf("%d", &n_max);
    for(n=1;n<=n_max;n++){
        printf("n=%d %.2f\n", n, pow(1.0+1.0/n, n));
    }
    return 0;
}
186デフォルトの名無しさん:2007/05/28(月) 16:51:06
>>184
#include <stdio.h>
#include <math.h>
int main(void){
double n,i;
printf("n=? ");
scanf("%lf",&n);
for(i=1.0; i<=n; i+=1.0) {
printf("n=%.0lf %.2lf \n",i, pow( 1.0+(1.0/i) , i) );
}
return 0;
}
187デフォルトの名無しさん:2007/05/28(月) 16:54:02
nとiをdoubleにする意味が全くわからん。
188デフォルトの名無しさん:2007/05/28(月) 16:55:10
doubleへのキャストを省くためじゃないの?
189デフォルトの名無しさん:2007/05/28(月) 16:55:56
>>187
int型の変数をdouble型で扱うライブラリにぶち込んで返ってきた値をfloat型の書式を用いている方が
よっぽどわけがわかんねぇ。へぼプログラマ黙ってろかす
190デフォルトの名無しさん:2007/05/28(月) 16:56:54
ttp://www.bohyoh.com/CandCPP/C/Library/pow.html
double pow(double x, double y);
191188:2007/05/28(月) 16:57:04
あ、別にキャスト要らないか。
192デフォルトの名無しさん:2007/05/28(月) 16:57:59
>>189
日本語でおk
193デフォルトの名無しさん:2007/05/28(月) 16:58:02
不要か必要かじゃなくて、適切か不適切かの話だろ。荒れるから自分勝手な意見は慎め。
194デフォルトの名無しさん:2007/05/28(月) 16:58:55
Cでは関数呼び出しの時にchar -> int、float -> doubleへの格上げが
されるので、printf()に %lf はいらん。%fで十分。

C99では %lf も正式に認められているが。
195デフォルトの名無しさん:2007/05/28(月) 16:59:02
>>187=>>192=日本語も適切な扱い方も知らないバカ 黙ってろカス

187 名前:デフォルトの名無しさん 投稿日:2007/05/28(月) 16:54:02
nとiをdoubleにする意味が全くわからん。
nとiをdoubleにする意味が全くわからん。
nとiをdoubleにする意味が全くわからん。
nとiをdoubleにする意味が全くわからん。
nとiをdoubleにする意味が全くわからん。
nとiをdoubleにする意味が全くわからん。
nとiをdoubleにする意味が全くわからん。
nとiをdoubleにする意味が全くわからん。

足りない頭ってやーね、こういうやつって自分が原因で他人に迷惑をかけているのに
気づかずに他人のせいにしてファビョるタイプだろ。消えろ
196デフォルトの名無しさん:2007/05/28(月) 16:59:32
>>193
荒れるのが嫌なら誰の発言のどの部分をどういう根拠で批判しているのか明確にしてくれ。
197デフォルトの名無しさん:2007/05/28(月) 17:00:16
>>194
> C99では
関係ない。ちなみに、お前が言っているのは暗黙のだろ?そういうプログラマいらねーんだよ
クソなソースを書いているクズだから
198デフォルトの名無しさん:2007/05/28(月) 17:02:39
>>195
>int型の変数をdouble型で扱うライブラリにぶち込んで返ってきた値をfloat型の書式を用いている方
これの意味が分からんから解説してくれと言ってるだけだが。

それから、俺は192だが187じゃない。
199デフォルトの名無しさん:2007/05/28(月) 17:02:41
>>196
いや、お前が最初にいったんだろ。意味がわからないのはお前の頭が足りないからwwwww
黙ってろよ、クソプログラマw おめーのソースの方がわけわかんねぇ〜ぜ
なにれこ?w >>185
int n, n_max;  pow(1.0+1.0/n, n));

> どの部分をどういう根拠で批判しているのか明確
>>187
> 意味が全くわからん。
どっちがw 適切さを知らない奴は、いつどこで不具合が起こっているか気づいてないんだろうね。
まるで、タイヤの空気圧が十分でないことがまさかの事故の原因になるとかw
200デフォルトの名無しさん:2007/05/28(月) 17:06:10
>>197
お前は何を言っているんだ
201デフォルトの名無しさん:2007/05/28(月) 17:08:55
>>186 のコードについては
1. math.h に pow のプロトタイプ宣言があるなら全く問題無い
2. C99以前では浮動小数点の書式指定は %f が正式

%lf は、C99で %f の代わりに書いても良いことが正式に決められた
202188, 191, 192, 196, 198, not 185 or 187:2007/05/28(月) 17:10:19
>>199
俺と>>185が同一人物だという妄想を抱いてるみたいだが、そんな前提で煽られても困る。
203201:2007/05/28(月) 17:11:03
アンカ間違えた
>>185 だった
204デフォルトの名無しさん:2007/05/28(月) 17:14:16
>>199
だからお前みたいな頭のおかしい奴はトリップ付けて発言しろ
あぼーんしやすいから
205デフォルトの名無しさん:2007/05/28(月) 17:14:24
但し、>186のコードはループ制御変数がdoubleなのでパフォーマンスに劣る可能性はある。
206デフォルトの名無しさん:2007/05/28(月) 17:16:40
>>204
いつものお人だろ
207デフォルトの名無しさん:2007/05/28(月) 17:17:13
>>185
int n, n_max; pow(1.0+1.0/n, n)); , n)); , n)); , n)); , n)); , n)); < ぷぷぷ、ぷぎゃー!
ttp://www.bohyoh.com/CandCPP/C/Library/pow.html
double pow(double x, double y);
これについて理解していなかったから、double型の宣言の意味がわからなかったそうでつ
どっちが意味わかんねぇんだか
208デフォルトの名無しさん:2007/05/28(月) 17:17:31
それと今回はループ変数がdoubleで1.0刻みだから良いが、もし刻みが
0.1とか0.01とかだと誤差が累積してループの終了条件が狂う事がある。

そういう時はintで回してdoubleは中でintから生成。
209デフォルトの名無しさん:2007/05/28(月) 17:18:15
>>205
パフォーマンス重視ならそれなりに措置をとるだろ。そういうくだらねぇことで
不適切なものを良しとするプログラマーはどうかしてんな。
210デフォルトの名無しさん:2007/05/28(月) 17:18:39
>>207
プロトタイプ宣言の意味も分からないカスは黙ってろ
211デフォルトの名無しさん:2007/05/28(月) 17:19:12
>207
>float型の書式
これよりマシw
212デフォルトの名無しさん:2007/05/28(月) 17:19:20
>>204
お前の方が頭がおかしいことに気づけよ、意味わんねぇ=自分が理解していない=日本語が理解できないw
最近、日本語でおkとか言う奴に限って、理解力がないだけだったりするから困るね。
こりゃNHKのことばおじさんも大変だ。ネタがあって良いだろうけどw
213202:2007/05/28(月) 17:20:23
>>207
つまり暗黙の変換を使うなって意見?
それはそれで良いんだが、前提にしていい常識じゃないだろ。
そういう意見なら最初からそういうべきだ。
214202:2007/05/28(月) 17:22:35
あと、%fと%lfは全く同じで、どちらもdoubleを受ける。念のため。
215デフォルトの名無しさん:2007/05/28(月) 17:22:39
>>194
> printf()に %lf はいらん。%fで十分
ていうよりは、C89なら%lfはイリーガルでは。受け入れるコンパイラが
多いけれども。

#include <math>してプロトタイプを取り込んでいる以上、
pow()にintの引数を渡すことには何の問題も無く、完全に合法だわな。
規格に従って適切にdoubleに形変換がなされることが保障されてるわけだ。
216205:2007/05/28(月) 17:23:16
なんだ、いつもの人か。私は「不適切なものを良し」とはしていないが相変わらずミスリードしているようで。
217デフォルトの名無しさん:2007/05/28(月) 17:23:30
>>213
> 前提にしていい常識じゃないだろ

いいえ。むしろ基本中の基本でしょう。
218デフォルトの名無しさん:2007/05/28(月) 17:25:23
>>194
自前で可変引数関数書く時に、va_arg() で嵌りそうな罠だな
# まずそういうシーンは無いけど
219205:2007/05/28(月) 17:25:46
>>217
確認するが、「暗黙の型変換は使うな」が「基本中の基本」だと書いている?
220デフォルトの名無しさん:2007/05/28(月) 17:27:18
>>218
intとポインタのサイズが異なる処理系では
execl()のような関数にNULLを渡す時に
0ではだめで、(char*)0のように書いたりしていたね。
221デフォルトの名無しさん:2007/05/28(月) 17:27:22
>>212
自己紹介乙。
自分の書いた文を後から読み返して顔が赤くなるほど恥ずかしくなっても知らんぞ。
222デフォルトの名無しさん:2007/05/28(月) 17:27:24
>>217
じゃあ、常識を共有していない人間と話すときは注意深くならなきゃならんという教訓だな。
(´・ω・`)ツマラナス
223デフォルトの名無しさん:2007/05/28(月) 17:28:13
>>219
いいえ。暗黙の型変換は当然のように多用される
Cのごく基本的仕様である、という意味。
224デフォルトの名無しさん:2007/05/28(月) 17:28:30
自分の方が不適切なコードを書いているのに他人批判で意味わからないとか言い出すのはぁ〜
どこのどいつだぁ〜い? >>187 = >>185 だよ!
ちゃんとpow()について参照されているのに、まだ理解していないんだね。
225デフォルトの名無しさん:2007/05/28(月) 17:28:41
釣りであることを祈るばかり

もしくは math.h の関数プロトタイプが
double pow();
だけになってるような古い環境で開発してた人で
現在の開発環境について知らない年配の人が
レスをつけてるのか…

でも浮動小数点数の書式指定自体は昔から %f が正式なはずなんだがなぁ
226デフォルトの名無しさん:2007/05/28(月) 17:29:19
オレ187だけど185じゃないよ。
227デフォルトの名無しさん:2007/05/28(月) 17:30:14
まあここでさっきからファビョってるバカはロートルプログラマである事は
間違いないようだな。
228デフォルトの名無しさん:2007/05/28(月) 17:30:32
> でも浮動小数点数の書式指定自体は昔から %f が正式なはずなんだがなぁ
というか、%lfはC99以前では違法のはず。
scanf()ではdoubleを受けるのに%lfを使う必要があるから、
そのように間違える人が非常に多く、%lfを受け入れる処理系も多いけれども。
229デフォルトの名無しさん:2007/05/28(月) 17:32:30
暗黙を良しとして押し切る奴ってさぁ、閣僚が不正をしても更迭されずにいて
不正そのものも閣僚なら問題ない行為として認識していそうだから困る。
まぁ、閣僚が自殺しても、同情は得られず不正は正当性がなく、支持率に影響するだろうけどさ。
230デフォルトの名無しさん:2007/05/28(月) 17:32:44
[2] 問題文(含コード&リンク):

A,T,G,Cのいずれかの文字を入力し、それぞれAはUに,TはAに,GはCに,CはGに置き換えられる
プログラムです。

例えば
ATTGといれると、UAACと表示されるプログラムです。

[3] 環境
 [3.1] OS: xp
 [3.2] visual studio 2005
 [3.3] 言語: C
[4] 期限: いつでもいいです。
[5] その他の制限: コメントをつけていただけるとありがたいです。
よろしくお願いいたします。
231デフォルトの名無しさん:2007/05/28(月) 17:33:17
>>229
頭大丈夫?精神病院行った方が良くない?
あ、すまん、もう精神病院に通院してるんだね。
232デフォルトの名無しさん:2007/05/28(月) 17:34:24
>>229
あなたが馬鹿だから、暗黙の型変換が厳密に規定された明瞭な仕様で
不正でもなんでもないことが理解できないだけでしょう。
自分が理解できないものは悪いものだと思ってしまうのですね。

C++ではそれが確かに問題視されたことがあり、explicitが導入された
訳だけれども、Cの型変換はそれとは全然次元の異なる問題です。
233218:2007/05/28(月) 17:36:17
>>220
execl って使ったことないので見てみたが… NULL ターミネイトな可変引数なのねw

sizeof(int) != sizeof(void *) な環境での NULL 自身の定義はどうなってたんだろ?
234205:2007/05/28(月) 17:40:05
>>223
それならOK。お騒がせ。

>>218
自分で実装しなくても、printf()を使うときには心の片隅程度には意識しておいた方がいいよ。
#charもintに格上げされるからこそ、printf("%c", 48 + 3)が正しく動くわけで。

>>233
NULLが0なんじゃない、0がNULLなんだ。だから、ポインタのサイズが幾つであろうとも
整数型の0に対してはNULLに等しいものとして処理できないといけない。
#昔はそうでない処理系もあったけどね。
235デフォルトの名無しさん:2007/05/28(月) 17:41:09
>>230
#include <stdio.h>
int main(void)
{
    unsigned char tab[0x100];
    int i, c;
    for (i = 0; i < 0x100; ++i)
        tab[i] = i;
    tab['A'] = 'U'; tab['T'] = 'A'; tab['G'] = 'C'; tab['C'] = 'G';
    while ((c = getchar()) != EOF)
        putchar(tab[c]);
    return 0;
}
236デフォルトの名無しさん:2007/05/28(月) 17:44:36
>>230
#include <stdio.h>
#include <string.h>

int main(void)
{
char buf[512];
int i;

fgets(buf, 512, stdin);

for (i = 0; i < strlen(buf); i++)
switch (buf[i]) {
case 'A':
buf[i] = 'U';
break;
case 'T':
buf[i] = 'A';
break;
case 'G':
buf[i] = 'C';
break;
case 'C':
buf[i] = 'G';
break;
}

printf("%s", buf);

return 0;
}
237デフォルトの名無しさん:2007/05/28(月) 17:44:57
>>230
#include <stdio.h>
int main(void){
    int moji;
    while((moji=getchar())!=EOF){ // EOFが入力されるまで続ける (Ctrl-D または Ctrl-Z かな?)
        switch(moji){
            case 'A':putchar('U');break;
            case 'T':putchar('A');break;
            case 'G':putchar('C');break;
            case 'C':putchar('G');break;
            default:putchar(moji);break; // ATGC 以外はそのまま出力する(入力されないはずだが)
        }
    }
    return 0;
}
238デフォルトの名無しさん:2007/05/28(月) 17:45:23
>>230
#include <stdio.h>
#include <unistd.h>
int main(){return system("/bin/sed -e 'y/ATGC/UACG/'");}
239デフォルトの名無しさん:2007/05/28(月) 17:46:55
>>234
> #charもintに格上げされるからこそ、printf("%c", 48 + 3)が正しく動くわけで。

どっちかというと
printf("%02x", c);
とかいうケースで驚くことが多そうですね。
charがsignedな処理系で非ASCIIの(負の)文字を与えると符号拡張されて
ffffffa0
みたいに表示されたりすることになる。
240デフォルトの名無しさん:2007/05/28(月) 17:47:47
>>238
> [3.1] OS: xp
> [3.2] visual studio 2005
241238:2007/05/28(月) 17:50:14
>>240
Oops!
242218,233:2007/05/28(月) 17:52:17
半端に古い処理系を脳内想定してた
>>234 で、かつ sizeof(int) != sizeof(void *) な系で、

int* p = 0; /* コンパイラが左辺の型からよしなに取り扱う */
execl("hoge", "foo", 0); /* 可変引数ゆえポインタ類推効かず */
execl("hoge", "foo", NULL); /* NULL は 0 と等価だから↑と同じ */
execl("hoge", "foo", (char*)0); /* やっとポインタでの 0 を積めた */

っつーことになると
243デフォルトの名無しさん:2007/05/28(月) 17:53:29
>>171
# include <iostream>
# include <string>

int main()
{
  std::string p("B"), c("A");
  for(int n = 0; ; n++)
  {
    std::cout << "n=" << n << " " << c << "\n";
    std::string next = c + p;
    p.swap(c);
    c.swap(next);
  }
}
244デフォルトの名無しさん:2007/05/28(月) 17:54:24
K○S○○A○Eかエピスっぽいレスだな
245デフォルトの名無しさん:2007/05/28(月) 17:59:08
>>242
> execl("hoge", "foo", 0); /* 可変引数ゆえポインタ類推効かず */
これはその通りですね
> execl("hoge", "foo", NULL); /* NULL は 0 と等価だから↑と同じ */
これはちょっと正確ではありませんね。
NULLは(Cでは)
(void*)0として定義されている処理系も多いでしょう。そうであれば
問題はない筈です。が、それが保障されているわけでもなく、実際
C++の処理系では単に0と定義されていることが多い。
それゆえ(char*)0のほうが確実であり、そういう書き方が多用されたのだと
思います。
246デフォルトの名無しさん:2007/05/28(月) 17:59:42
串揚げ?
247デフォルトの名無しさん:2007/05/28(月) 18:03:19
クーーックックゥ〜、このスレはネタを投下するとすぐに盛り上がるから面白い(クルル曹長風に
自作板にしろ、ちょこっとできることがあればそれだけで自分の能力や知識を過信して
間違った解釈や知識を用いて他人を批判しちゃうから墓穴を掘るのさ クーックックゥ〜
248デフォルトの名無しさん:2007/05/28(月) 18:06:41
>>247
お前一人を除いてだれも間違った解釈や知識で誰かを批判などしてないと思うが。
249デフォルトの名無しさん:2007/05/28(月) 18:13:10
>>245
64bit環境(sizeof(int)!=sizeof(void*))用gcc辺りだと、安全にスタックに積めるようにNULLが(void *) 0になっているみたいだ。
250デフォルトの名無しさん:2007/05/28(月) 18:27:04
>>248 = >>187
> nとiをdoubleにする意味が全くわからん。
             ^^^^^^^^^^^^^^^^^^^^^^^^^
251デフォルトの名無しさん:2007/05/28(月) 18:31:53
>>250
しつこいな。粘着質か。
そいつは素直に「わからん」と言ってるだろう。知ったかぶりなど
してないだろう。
252デフォルトの名無しさん:2007/05/28(月) 18:41:56
[1] 授業単元:c言語
[2] 問題文(含コード&リンク):catコマンドと同じ機能のプログラムを作成せよ。
                  簡単な実験結果もお願いします。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: [2007年05月28日23:30まで]
[5] その他の制限:fgetc(), fputc() 関数を使用すること。
標準出力とすること。
ファイル名を複数指定できること。
ただし、ファイル名を指定しない場合は標準入力とすること。
            なお、オプションは指定できなくてもよい。


どうかよろしくお願いします。
253デフォルトの名無しさん:2007/05/28(月) 18:53:35
>>252
#include <stdio.h>
static void cat(FILE * fp)
{
int ch;
while ((ch = fgetc(fp)) != EOF) {
fputc(ch, stdout);
}
}
int main(int argc, char ** argv)
{
if (argc == 1) {
cat(stdin);
} else {
for (int ic = 1; ic < argc; ++ic) {
FILE * fp = fopen(argv[ic], "r");
if (fp != NULL) {
cat(fp);
fclose(fp);
}
}
}
return 0;
}
254デフォルトの名無しさん:2007/05/28(月) 19:17:23
>>253
for (int ic = 1; ic < argc; ++ic) {
   ^^^^^^^
ここだけ C++?
255デフォルトの名無しさん:2007/05/28(月) 19:21:51
C99じゃね?
256254:2007/05/28(月) 19:27:41
>>255 了解
gcc -std=c99 ???.c
でコンパイルできた

…にしても gcc ってオプション調べるだけでも大変だ
257デフォルトの名無しさん:2007/05/28(月) 21:25:06
>>253>>254>>255>>256
本当にありがとうございました。
できればテキストファイルの結合のしかたも教えていただけませんか
258デフォルトの名無しさん:2007/05/28(月) 22:06:48
>>257
コレのこと?

cat file1 file2 > output
259デフォルトの名無しさん:2007/05/28(月) 22:22:22
[1] 授業単元:c言語
[2] 問題文(含コード&リンク):


プログラムに0以上59以下の値をとる二つの整数を与える.これらの2数を順にm, nとする.これらをm分n秒と解釈する.与えられた時間の(秒単位で)半分となる時間をコロン(:)で区切られた二組の二桁の整数で表示するプログラムを作成しなさい.
表示する分数、秒数が9以下のときは10の桁にはスペースを置く.
秒数が2で割り切れないときは切り捨てを行う.
m,nのどちらかが0以上59以下でなければ,errorのみを表示すること.


[3] 環境
 [3.1] OS: linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限:
[5] その他の制限: どなたかおねがいします。
260デフォルトの名無しさん:2007/05/28(月) 22:28:12
>>259
22:22:22

mixiで見たけど同じ人?
261デフォルトの名無しさん:2007/05/28(月) 22:32:17
>>259
#include <stdio.h>
int main(void){int n=0, m=0, t;scanf("%d", &m);scanf("%d", &n);
if(0 <= m && m <= 59 && 0 <= n && n <= 59){t = (60 * m + n) / 2;m = t/60;
n = t - m * 60;printf("%2d:%2d", m, n);}else printf("error");return 0;}
262デフォルトの名無しさん:2007/05/28(月) 23:05:59
>>260
すいませんおなじ人間です。

>>260
ようやくわかりました。時間の計算の部分がアホなんでわかりませんでした・・・
263デフォルトの名無しさん:2007/05/28(月) 23:42:08
>>258
はい それのプログラム版のを
264デフォルトの名無しさん:2007/05/29(火) 00:15:30
つリダイレクト
265デフォルトの名無しさん:2007/05/29(火) 00:39:37
釣りダイレクトって読んじゃったよ。
-- 最低限機能版
#include <stdio.h>
int main(int argc, char ** argv)
{
if (argc < 4) return 1;
FILE * in1 = fopen(argv[1], "r");
if (in1 == NULL) return 1;
FILE * in2 = fopen(argv[2], "r");
if (in2 == NULL) return 1;
FILE * out = fopen(argv[3], "w");
if (out == NULL) return 1;
int ch;
while ((ch = fgetc(in1)) != EOF) {
fputc(ch, out);
}
fclose(in1);
while ((ch = fgetc(in2)) != EOF) {
fputc(ch, out);
}
fclose(in2);
fclose(out);
return 0;
}
266 ◆HFYa0.2pYo :2007/05/29(火) 00:44:06
[1]授業単元:プログラミング演習
[2]問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4101.txt
[3]環境
[3.1]OS:Linux
[3.2]コンパイラ名:gcc
[3.3]言語:C
[4]期限:2007年6月4日まで
[5]その他:自宅ではWindows、学校ではLinux使用

この選択ソートのプログラムを改良して、
「最大で」10個までの整数をソートできるようにしたい(入力した数字の個数が10個以下でも動作するようにしたい)のですが、
うまくいきません。ご教授願います。
267 ◆etVdfbufd2 :2007/05/29(火) 00:53:39
[1] 授業単元:その他
[2] 問題文(含コード&リンク): 「WEB上の画像を右クリックで保存」←この動作をプログラムで書け.
[3] 環境
 [3.1] OS:Windowsのcygwin上でコンパイルします.
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C/C++どちらでも可.
[4] 期限:可能な限り早くお願いします.
[5] その他の制限: 特になし.

WEB上のtextデータをとってくるプログラムなら書けたのですが,
画像をとってくるものはうまくいきません.
よろしくお願いします.
268デフォルトの名無しさん:2007/05/29(火) 01:23:10
これ学校の宿題?
趣味じゃねーの?
269デフォルトの名無しさん:2007/05/29(火) 01:39:09
>>267
画像取って来るのもテキスト取って来るのも変わらんわけだが。
270デフォルトの名無しさん:2007/05/29(火) 01:46:57
>>268-269
おめーらほんっとgdgdうるせーな、言うくらいならお前がやってみろよ。どうせ出来ないんだろ?w
だって、pow()の引数にint型をそのまま(ry
271デフォルトの名無しさん:2007/05/29(火) 01:54:05
.NETなら再現するのは簡単だが・・・
272 ◆etVdfbufd2 :2007/05/29(火) 01:54:37
>>268
授業の宿題ではないけど大学で科された課題です.

>>269
bmp形式のデータを取りたいんですけど,バッファに一度入れてから
取ってきてるんで,bmp形式に直せないんですよね.

>>270
pow()は初見です.ちょっくらググってみます.
273デフォルトの名無しさん:2007/05/29(火) 01:55:53
274 ◆HFYa0.2pYo :2007/05/29(火) 02:13:25
>>273
ご丁寧にありがとうございました。
275デフォルトの名無しさん:2007/05/29(火) 02:52:02
>>272
WinSock2で悪いな。
基本は一緒だし、txt取れてるならなんかの参考にゃなると思うが。

とりあえず色々メンドイのでgoogleのトップに表示されてるロゴを取ってくるプログラム

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4103.lzh

確かhtml取って来るときに一緒に画像も落ちて来たと思うが、
なんかその辺の詳しい応答のフォーマットは忘れた。
276デフォルトの名無しさん:2007/05/29(火) 05:04:22
>>135
お願いしますm(_ _)m
277デフォルトの名無しさん:2007/05/29(火) 05:15:35
>>135 どういう迷路?
278デフォルトの名無しさん:2007/05/29(火) 07:23:17
>>265
ありがとうございます。
279155:2007/05/29(火) 09:19:14
>>166
たしかにそんなかんじです・・・・

ありがとうございました
280デフォルトの名無しさん:2007/05/29(火) 10:19:15
ニコニコ動画で悪いんですが、このプログラムは具体的に
どうゆう処理をしているのか教えてください
http://www.nicovideo.jp/watch/sm358647


281デフォルトの名無しさん:2007/05/29(火) 10:23:24
>>280
ドット絵から読み込んだデータから色の指定をHTMLのFONTタグで指定して
■をそれで囲ってHTMLに書き出しているってことか?
282デフォルトの名無しさん:2007/05/29(火) 10:30:12
指定したbmpファイルを読み込んで、指定したhtmlファイルに書き出すプログラムみたいだね。
概要はそうだが、bmpの各ドットの色のコードを読み取ってんだろうね。まぁ、これくらいなら
そう難しくないんじゃないかね。ただ、HTMLのタグの知識も必要かな。
283デフォルトの名無しさん:2007/05/29(火) 10:30:12
>>281
えっとできればソースレベルで教えていただけるとうれしいです

始めたばかりの初心者なんんですが好奇心でちょっと見てみたんですが
さっぱり意味がわからなくて
284デフォルトの名無しさん:2007/05/29(火) 10:40:18
まぁ、スレ違いなんで、あとは他のそれに応じたスレで。とりあえず、BMPを読み込むみたいだし
ttp://coconut.sys.eng.shizuoka.ac.jp/bmp/
のように、BMPの仕組みを理解して、読み込んだデータからHTMLタグのFONTの属性の
COLORを指定したのを■で囲んで書き出せるプログラムにすりゃええがな。
285デフォルトの名無しさん:2007/05/29(火) 11:55:07
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
指数関数exの近似値を返す関数expon(x, n)をつくります。
第1引数は浮動小数点数xで,
第2引数はexをTaylor展開で展開する際の最大次数nになります。
n次項までのTaylor展開の式は下に示す通りです。
さらに,浮動小数点数yと正の整数mを引数とし,
yの小数点m桁より下を切り捨てて出力する関数trunc(y, m)をつくりなさい。
次に,これらの2つの関数を用いて,
exの近似値を小数点以下の桁数を指定して出力するプログラムをつくりなさい。
ex » 1 + x + x2/2! + x3/3! + … + xn/n!
指数関数exp(x)の近似値を計算します!
xを入力してください:2.5↵
Taylor展開の最大次数nは:100↵
小数点以下の桁数mは:3↵
exp(x)の近似値 = 12.182
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:borland
 [3.3] 言語:C
[4] 期限:今週日曜日
よろしくお願いします。

286デフォルトの名無しさん:2007/05/29(火) 12:01:09
[1] 授業単元: C
[2] 問題文(含コード&リンク):
神経衰弱ゲーム」のシミュレーションを作成してみる。
マス目は4×4。8種類の動物名が2匹ずつ隠されています。
並び順は乱数で発生しましょう。
2枚ずつ順番に表にして当たっていれば,表向きのままになります。
はずれれば一定時間おいて裏に戻しす。
最大試行回数を設定して,ゲームを進行する。
全部当たれば「やったね!」と祝福し,駄目だった場合は全部表向きにしてから「またね!」とメッセージを表示してみましょう。
画面の表示などインタフェースにも工夫してみよう。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: borland
 [3.3] 言語: C
[4] 期限:6月7日


287デフォルトの名無しさん:2007/05/29(火) 14:12:38
>>286 きんもぉ〜☆なソースでよければw
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4104.c
288デフォルトの名無しさん:2007/05/29(火) 14:13:56
>>286
>>287の最初に動物が表示される部分は消しておいてちょっ
あと
// char *anims[]={"rat","cow","tiger","rabbit","horse","sheep","monkey","bird"};
の部分も
289デフォルトの名無しさん:2007/05/29(火) 16:37:54
>>135
すいません3×3程度の迷路です。
s-1-2-3
**|*|**  左のような迷路です。 
**4-5-6  ーと|が道で*は行き止まりです。
****|**  わかりにくくてすいません。よろしくお願いします。
**7-8-G
290デフォルトの名無しさん:2007/05/29(火) 16:52:38
質問です。

C言語でWin32アプリをつくっているのですが、
アクティブなウィンドウの、指定した位置の表示している色を
取得するにはどうしたらいいですか?

やっぱり一旦表示された後だと厳しいんですかね…?

ご教授お願いします。
291デフォルトの名無しさん:2007/05/29(火) 16:54:25
GetPixel
292デフォルトの名無しさん:2007/05/29(火) 16:54:32 BE:122283397-2BP(222)
>>290
スレ違い。Win32APIスレへ。
293デフォルトの名無しさん:2007/05/29(火) 18:20:56
>やっぱり一旦表示された後だと厳しいんですかね…?
そんなことはないよ?
というか表示される前の方が面倒だとおもうんだけどw
294セス:2007/05/29(火) 18:38:51
[1] 授業単元:プログラミング言語C
[2] 問題文(含コード&リンク):
整数型の変数a・b と、文字型の変数e を用意し、
キーボードから2つの数値と1つの演算子を入力し
、その計算結果cを出力するプログラムを作成しなさい。

実行される計算は和・差・積・商・剰余の5種類とし、
演算子はそれぞれ’+’、’-’、’*’、’/’、’%’で
表現されるものとする。

演算子にそれ以外の記号が入力された場合は
エラーメッセージを表示する。
また0による除算の回避も含めること。

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限:5/29の24時まで
[5] その他の制限: 特になし

お願いします
295セス:2007/05/29(火) 18:40:56
[1] 授業単元:プログラミング言語C
[2] 問題文(含コード&リンク):

次の説明は冬季オリンピックの開催年についての説明である。

キーボードから変数year に入力された年号について、
開催された年に第何回大会が開催されたか
画面に表示するプログラムを作成しなさい。

また開催年でない場合は、画面にその旨メッセージを出力すること。

【説明】
1924 年の第1 回大会以来、4 年に1 度開催されている。
1992 年の第16 回大会までは夏季大会と同じ年に開催されたが、
1994 年の第17 回大会からは、夏季大会の2 年後に開催されるようになった。
1940 年、1944 年は第二次世界大戦の影響で中止。
次回は2010 年、第21 回大会、カナダのバンクーバーで開催予定。

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限:5/29の24時まで
[5] その他の制限: 特になし

二つですが、お願いします○┓ペコ
296デフォルトの名無しさん:2007/05/29(火) 19:08:57 BE:31055982-2BP(222)
>>295
#include<stdio.h>
#include<stdlib.h>
int main(void){char tmp[256];int year,i;
int games[]={1924,1928,1932,1936,1948,1952,1956,1960,1964,1968,1972,1976,
1980,1984,1988,1992,1994,1998,2002,2006,2010,};fgets(tmp,256,stdin);year=atoi(tmp);
for(i=0;i<sizeof(games)/sizeof(int);i++){
if(year==games[i]){printf("%i年 第%i回\n",year,i+1);return 0;}}
printf("%i年 非開催\n",year);return 0;}
297デフォルトの名無しさん:2007/05/29(火) 19:10:01 BE:157221599-2BP(222)
2981/3ぐらい:2007/05/29(火) 19:26:21
[1] 授業単元:プログラム2
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (WindowsXP)
 [3.2] VC++ 6.0)
 [3.3] 言語: (/C++)
[4] 期限: ([明日)
[5] その他の制限: (特になし)
-----------------------------------------------------
//構造体の定義
struct Employee
{
int number; //従業員番号
char name[80];//氏名
long wage; //給与
};
//プログラムのメイン関数
void main(void)
{
//構造体をデータ型とした変数を宣言
struct Employee person[10];
//構造体のメンバーへ値を代入
person[0].number = 1234;
strcpy(person[0].name,"田中 一郎");
person[0].wage = 200000;

person[1].number= 1235;
strcpy(person[1].name,"佐藤 次郎");
person[1].wage = 250000;
2992/3通り越して3/3:2007/05/29(火) 19:28:20
person[2].number= 1236;
strcpy(person[2].name,"鈴木 三郎");
person[2].wage = 300000;

//構造体のメンバを表示
for(int i = 0;i<3;i++){
cout << person[i].number<<"\n";
cout << person[i].name <<"\n";
cout << person[i].wage <<"\n";
}
}
----------------------------------------------------------------------------
k:\kadai\kadai5\kadai5.cpp(17) : error C2065: 'strcpy' : 定義されていない識別子です。
k:\kadai\kadai5\kadai5.cpp(30) : error C2065: 'cout' : 定義されていない識別子です。
k:\kadai\kadai5\kadai5.cpp(30) : error C2297: '<<' : 不正な右オペランドです。
k:\kadai\kadai5\kadai5.cpp(31) : error C2297: '<<' : 不正な右オペランドです。
k:\kadai\kadai5\kadai5.cpp(32) : error C2297: '<<' : 不正な右オペランドです。
cl.exe の実行エラー

なぜそのようなエラーが出るのかさっぱりわかりません・・・
どなたか助けてください。
300セス:2007/05/29(火) 19:35:39
>>297
そちらのページ参照しましたが、%のプログラミング載ってないんですがどうすればいいんでしょうか
後、#include<stdio.h>しかまだやっていません。。
301デフォルトの名無しさん:2007/05/29(火) 19:44:45
>>298->>299
#includeは?あとネームスペースは?
302298-299:2007/05/29(火) 19:51:33
学校からコピーして持ち帰って、途中から作成したのでミスってたようです。。。
見逃してました・・・
お恥ずかしい限りで・・・
#include<iostream>
#include<string.h>

using namespace std;
を加えたら成功しました・・・
303デフォルトの名無しさん:2007/05/29(火) 20:07:17
>>294
整数a←キーボード入力
整数b←キーボード入力
文字e←キーボード入力

文字eの場合分けここから
文字eが'+'の場合:
   整数aと整数bを足し算して結果を表示する

文字eが'-'の場合:
   整数aから整数bを引き算して結果を表示する



文字eが'-'の場合:
   整数bが0ならば、エラーメッセージを表示する
   それ以外ならば、整数aを整数bで割り算して結果を表示する



文字eが’+’、’-’、’*’、’/’、’%’以外の場合:
   エラーメッセージを表示する
文字eの場合分けここまで



なお'%'は余剰である。
304デフォルトの名無しさん:2007/05/29(火) 20:08:35
間違えた…

【間違い】


文字eが'-'の場合:
  整数bが0ならば…

【正しくは】


文字eが'/'の場合:
  整数bが0ならば…
305セス:2007/05/29(火) 20:21:47
>>297
何か習ってないものばかり何ですが
#define STACK_DEPTH 100
↑こういうの習ってないんですけど
#include<stdio.h>
int main(void)

これだけでは出来ないのでしょうか?
295も同じくです
306デフォルトの名無しさん:2007/05/29(火) 20:48:20
>>305
#define c言語で検索かけて、#defineを意味を調べてみな
すぐに、#defineを使わない方法が分るはずだから
置換は有用、痴漢は犯罪
307デフォルトの名無しさん:2007/05/29(火) 21:03:28
丸投げスレで自分で勉強することを勧められたら丸投げの意味ないじゃん
308デフォルトの名無しさん:2007/05/29(火) 21:03:36
[1] 授業単元: C言語
3] 環境
 [3.1] OS: MacOSX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:5月31日までにお願いします
309デフォルトの名無しさん :2007/05/29(火) 21:03:57
#include <stdio.h>

int main()
{
int a,b,c = 0,e;
char buff[256];
puts("整数を,区切りで入力→Enter");
fgets(buff,sizeof(buff),stdin);
sscanf(buff,"%d,%d",&a,&b);
puts("演算子入力");
e = getchar();

switch(e){case '+': c = a + b;
break;
case '-': c = a - b;
break;
case '*': c = a * b;
break;
case '/': if(b == 0){ fprintf(stderr,"0で除算しようとしました");
break; }
c = a / b;
break;
case '%': if(b == 0){ fprintf(stderr,"0で除算しようとしました");
break; }
c = a % b;
break;
default: fprintf(stderr,"適切な入力ではありません");
break;
}
printf("%d \n",c);
return 0;
}
310デフォルトの名無しさん:2007/05/29(火) 21:04:17
入力ファイル(テキストファイル)の中の単語の長さを調べてその頻度 を表示するプログラムを作れ。
ただし、単語の定義は空白、タブ、改行、 ピリオド(.)、コンマ(,)を含まない文字列の固まりとする。
また、ピリオドとコンマは長さ0の単語としてカウントせよ。
また、20文字以上はまとめてカウントせよ。
311名無し ◆ivKilCni/k :2007/05/29(火) 21:22:18
[1] 授業単元:c言語
[2] 問題文(含コード&リンク):
文字列の置換処理
・入力データの文字数:(半角アルファベット大文字。スペースも一文字に含める。)
・入力データの単語最大文字数:(10文字まで)
・入力データはキーボード入力で設定する。:例)get()とかscanfとか。
・入力データと出力データを表示する。
・文字列(単語)"XYZ"は"HA"に、"ABC"は"DEFG"に変換する。
・文字を変換後に30文字を超えてもいい。ただし、30文字を超える場合は改行して表示する。
・キーボード入力の際、文字列が30文字を超えた場合や単語が10文字を超えた場合は
 警告メッセージを表示して、再入力させる。 例)詳細は実行例を参照してください。
・キーボード入力が空の場合は、プログラムを終了する。
・キーボード入力が空以外なら、ループする。
 (実行例)
        ----5----0----5----0----5----0
変換前:ABC ABD XYZBC TABCL XYZX YZZWD
変換後:DEFG ABD HDEFG TDEFGJ HAX
改行分:YZZWD
        ----5----0----5----0----5----0
変換前:ABC ABD XYZBC TABCL XYZX YZZWDXXX
## 30文字を超えています ##
        ----5----0----5----0----5----0
変換前:ABC ABD XYZBC AAAAAAAAAAAAAAAA
## 単語は10文字以内です ##
        ----5----0----5----0----5----0
[3] 環境
 [3.1] OS: Windows
 [3.2] VC 6.0
 [3.3] 言語: C
[4] 期限: 2007年6月1日
[5] その他の制限: どなたかおねがいします。
312名無し ◆ivKilCni/k :2007/05/29(火) 21:28:06
途中までできてるのですが。。。誰かお願いします。。。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void str_replace(char *a, const char *target_a, const char *new_a);

int main(void)
{
  char a[80], b[30], c[30], d[80], e[80];
  int i, a_len;
  printf("例題02:文字列の置換処理\n\n");
  for(; ;) {
printf("        ----5----0----5----0----5----0\n変換前:");
memset(a, '\0', 80);
memset(d, '\0', 80);
gets(a);
a_len = strlen(a);
if(a_len>31){
printf("## 30文字を超えています ##\n");
continue;
}
else if(a_len==0) exit(0);
str_replace(a, "XYZ", "HA");
str_replace(a, "ABC", "DEFG");
a_len = strlen(a);
strcpy(d, a);
d_len = strlen(d);
m = d_len;
for(l=d_len; l>=30; l--) {
m = l;
m--;
313名無し ◆ivKilCni/k :2007/05/29(火) 21:30:01
}
memset(e, '\n',d_len-l);
printf("変換後:%s\n", d);
}
return 0;
}

void str_replace(char *a, const char *target_a, const char *new_a)
{
int target_len = strlen(target_a); //置換対象文字列の長さ
int new_len = strlen(new_a); //置換後文字列の長さ
int str_len = strlen(a); //文字列の長さ
char *replace_pos; //検索を開始する位置
//置換文字列の場所を検索
while(0!= (replace_pos = strstr(a, target_a))) {
//文字列を挿入する場所を作成する
memmove(replace_pos + new_len, replace_pos + target_len, strlen(replace_pos) - target_len);
//置換文字列を挿入する
memmove(replace_pos, new_a, new_len);
//文字数が少なくなる場合、NULLコードの位置も変更
if(target_len > new_len)
{
*(a + str_len - target_len + new_len) = '\0';
str_len = strlen(a);
}
}
}
314デフォルトの名無しさん:2007/05/29(火) 21:56:06
>>310
#include <stdio.h>
#include <ctype.h>
int main(void)
{
    int c, n = 0, in_word = 0, count[21] = { 0 };
#define MIN(a,b) ((a) > (b) ? (b) : (a))
#define COUNTUP do { if (in_word) ++count[MIN(n,20)]; } while (0)
#define OUTOFWORD do { in_word = n = 0; } while (0)
    while ((c = getchar()) != EOF) {
        if (isspace(c)) {
            COUNTUP; OUTOFWORD;
        } else if (c == '.' || c == ',') {
            COUNTUP; OUTOFWORD; ++count[0];
        } else {
            in_word = 1; ++n;
        }
    }
    COUNTUP;
    for (n = 0; n <= 20; ++n)
        printf("%2d: %d\n", n, count[n]);
    return 0;
}
315デフォルトの名無しさん:2007/05/29(火) 23:19:47
[1] C言語
[2] http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4107.txt
↑のソースで表示される三角形をいじって線対称に反対表示にしてください
[3] Visual C++
 [3.1] WinXP
[4] 2日後
[5] for文とif文までくらいしか習っていません
316デフォルトの名無しさん:2007/05/29(火) 23:59:29
x軸に対して?それともy軸に対して?
317デフォルトの名無しさん:2007/05/30(水) 00:00:59
>>315
一番最後の、内側のループで使ってるiをh-iにするといいよ。
for(j=0; j<=h-i; j++)
{
if(x[h-i][j]%2==1)
printf("@",x[h-i][j]);
else
printf(" ",x[h-i][j]);
}
こんなのにする。
318デフォルトの名無しさん:2007/05/30(水) 00:26:14
課題
入力された秒数を実数にして、時間・分・秒数に変換するプログラムを教えてください。お願いします
319デフォルトの名無しさん:2007/05/30(水) 00:27:44
虚数で入力するのか?
320318:2007/05/30(水) 00:29:20
はい
321デフォルトの名無しさん:2007/05/30(水) 00:42:19
>>318
ダマされたと思って、これで提出してご覧なさい。

#include <stdio.h>
int main(int argc, char** argv) {
int i = atoi(argv[1]);
printf( "h:%d m:%d s:%dn", i/(60*60), (i/60)%60, i%60 );
}
322デフォルトの名無しさん:2007/05/30(水) 00:44:24
それだとatoi呼び出せなくね?
323デフォルトの名無しさん:2007/05/30(水) 00:47:33
>>322
呼べる。
プロトタイプがないときは引数のチェック無しで、
intを返すものとして扱われる。
どうせ宿題だし。
まあ、でも
#include <stdlib.h>
が抜けてたのは俺のミス。
324デフォルトの名無しさん:2007/05/30(水) 01:06:05
前スレでも書き込んだのですが

アルファベット以外の文字が入力されたら、"BAD"と表示するにはどうすればいいんでしょうか?
325デフォルトの名無しさん:2007/05/30(水) 01:08:31
前スレ?
326webmaster@気まぐれアナスイ:2007/05/30(水) 01:10:05
1
327デフォルトの名無しさん:2007/05/30(水) 01:11:44
ぼるじょあ氏とここは繋がりがないのでしょうか、でしたら失礼しました
328webmaster@気まぐれアナスイ:2007/05/30(水) 01:13:25
正確には1,2
329デフォルトの名無しさん:2007/05/30(水) 01:13:53
>>324
>アルファベット以外の文字が入力されたら、"BAD"と表示するにはどうすればいいんでしょうか?
puts("BAD");
330デフォルトの名無しさん:2007/05/30(水) 01:13:54
>>324
if(!isalpha(moji))printf("BAD");
ここはぼるじょあスレとは別スレだよ
331デフォルトの名無しさん:2007/05/30(水) 01:16:48
puts salphaなど習っていないのですが、もっとやさしいバージョンはないでしょうか
332デフォルトの名無しさん:2007/05/30(水) 01:17:14
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
自分の姓名を表示せよ。ただし、配列a[]を用いてこれを自分の姓名の文字列で初期化し、1文字ずつ出力せよ
[3] 環境
[3] 環境
 [3.1] OS: Windows
 [3.2] VC 6.0
 [3.3] 言語: C
[4] 期限:6月2日
配列がさっぱりわからない・・・・
よろしくお願いします。
333デフォルトの名無しさん:2007/05/30(水) 01:21:25
>>318ですが、ベースはこんな感じだそうです。

♯include <stdio.h>
intmain(void)
{
int ji,fun,byou;

printf("秒数=")
scanf("%d",&byou);
ji=byou/3600;
byou=byou%3600;
fun=byou/60;
byou=byou%60;

printf("%d時間%d分%d秒\n",ji,fun,byou);

return0;
}

あと>>320は私ではありません。
334315:2007/05/30(水) 01:26:15
>>316-317
ありがとうございます。

でもx軸対象じゃなくてy軸対象にしないと駄目なのです;;
335デフォルトの名無しさん:2007/05/30(水) 02:21:04
>>289
すいませんお願いしますm(__)m
336デフォルトの名無しさん:2007/05/30(水) 02:38:04
>>333
>入力された秒数を実数にして

入力は実数以外って事?
337デフォルトの名無しさん:2007/05/30(水) 04:20:58
木構造にすると、迷路のロードがめんどいな
338デフォルトの名無しさん:2007/05/30(水) 07:17:31
1:OS:WinXP
2:コンパイラ名とバージョン:Borland
3:言語:C
テーマ:繰り返し処理(while文)
課題1:キーボードより整数を入力し、1〜nまでの合計を求めなさい
実行画面
整数nの入力==>5
合計:15

課題2:複数件の整数を入力し、合計、件数、平均を求め表示しなさい
0が入力されたらデータのsy


339デフォルトの名無しさん:2007/05/30(水) 07:18:29
>>324 >>331
の方お願いします
340デフォルトの名無しさん:2007/05/30(水) 07:27:17
>>339
どうせやっても「まだ習ってないので」とか言い始めるから嫌。
せめてどこまで習ってるのか教えてくれないと。
341デフォルトの名無しさん:2007/05/30(水) 07:30:09
1:OS:WinXP
2:コンパイラ名とバージョン:Borland
3:言語:C
テーマ:繰り返し処理(while文)
課題1:キーボードより整数を入力し、1〜nまでの合計を求めなさい
実行画面
整数nの入力==>5
合計:15

課題2:複数件の整数を入力し、合計、件数、平均を求め表示しなさい
0が入力されたらデータの終了とし、合計、件数には反映しない
実行画面
整数入力(0で終了) ==>5
整数入力(0で終了)==>4
整数入力(0で終了) ==>10
整数入力(0で終了) ==>8
整数入力(0で終了)==>0
合計:27  件数:4  平均:6.8



342341の続き:2007/05/30(水) 07:31:11

課題3:キーボードより複数件のデータを入力し、奇数と偶数の合計を計算しなさい
-1が入力されたらデータの終了とし、合計には加えない
実行画面
整数入力==>3
整数入力==>8
整数入力==>10
整数入力==>7
整数入力==>0
整数入力==>26
整数入力==>19
整数入力==>1
整数入力==>-1
奇数合計:30
偶数合計:44
以上の3問よろしくお願いします

343デフォルトの名無しさん:2007/05/30(水) 07:34:31
printf scanf putchar if(〜〜〜) を習ってます
344デフォルトの名無しさん:2007/05/30(水) 07:39:21
>>336

入力するのを実数でも対応できるようなプログラムを作りたいんです
345デフォルトの名無しさん:2007/05/30(水) 08:14:31
>>341
#include <stdio.h>
int InputInteger(char* str, int* iptr) { printf(str); scanf("%d", iptr); return *iptr;}
int main(void){
{ /* 課題1 */
int n, r=0;
InputInteger("整数nの入力==>", &n);
while(n!=0){ r+=n--; }
printf("合計:%d\n", r);}
{ /* 課題2 */
int sum=0, num=0, n; double ave;
while(InputInteger("整数入力(0で終了) ==>", &n)){ sum+=n; num++;}
if(num==0) ave=0; else ave=sum/num;
printf("合計:%d  件数:%d  平均:%f\n", sum, num, ave);}
{ /* 課題3 */
int n, odd=0, even=0;
while(InputInteger("整数入力==>", &n) != -1){
if(n%2 == 0) even+=n; else odd+=n;}
printf("奇数合計:%d\n偶数合計%d\n", odd, even);}
return 0;}
346デフォルトの名無しさん:2007/05/30(水) 08:53:08
>>339
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4108.txt

!=習ってませんとか、&&習ってませんとか言われそうでイヤだな
これ以上やさしいバージョンとか作れねぇYO
347デフォルトの名無しさん:2007/05/30(水) 08:55:28
スレタイに「○○○を習っていません禁止」と一文入れるか。
348デフォルトの名無しさん:2007/05/30(水) 08:58:24
>>347
>>1に入れればいい。つーか
>・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
これがそうなんだけどな、意味がわかってない奴多すぎ
349デフォルトの名無しさん:2007/05/30(水) 09:09:42
>>344
何か答えになってないよ
実数の意味分かる?
350デフォルトの名無しさん:2007/05/30(水) 09:10:24
>>307
丸出ししたものを衣類で隠すことを勧められたとしても、丸出しした意味は十分あるぞい♪
351デフォルトの名無しさん:2007/05/30(水) 09:14:30
>>324 >>339
#include<stdio.h>
int main(void){
char c;
scanf("%c", &c);
if(64 < c)if(c < 91)return 0;
if(96 < c)if(c < 123)return 0;
printf("BAD");
return 0;
}
不等号習っていませんとか言われたらもうお手上げだな
352デフォルトの名無しさん:2007/05/30(水) 09:16:45
>>351
色々ダメすぎ。
まぁ、元質がダメすぎだからどうでもいいか。
353デフォルトの名無しさん:2007/05/30(水) 09:19:52
>>352
どうみてもネタ解答なのにダメだしされても困るけどな・・・
354デフォルトの名無しさん:2007/05/30(水) 09:20:16
ASCIIコード習っていません><
355デフォルトの名無しさん:2007/05/30(水) 09:26:21
[1] 授業単元:c/c++
[2] 問題文(含コード&リンク): コンパイルせよ
[3] 環境
 [3.1] OS: Windows
 [3.2] VC 6.0
 [3.3] 言語: C
[5] その他の制限:完璧ど素人です
コンパイルしようとすると
外部シンボル"_popup"
外部シンボル"_clsc"
外部シンボル"_defwin"
外部シンボル"_plots"
外部シンボル"_doplot"
外部シンボル"_dpoly"
外部シンボル"_fpoly"
外部シンボル"_newpen"
外部参照8が未解決です
とどうしてもなってしまいコンパイルできません。誰か教えてください

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



356デフォルトの名無しさん:2007/05/30(水) 09:35:15
半年後にまだ覚えていたらやるわ
357デフォルトの名無しさん:2007/05/30(水) 10:16:31 BE:69876094-2BP(222)
>>355
コンパイルはできている。以上。
358デフォルトの名無しさん:2007/05/30(水) 10:20:03
>>355
popupとかエラーが出ている関数の定義はどこでしてるの?
>>355のリンク先にあるソースでは定義していないから、当然リンクでエラーがでる。
359デフォルトの名無しさん:2007/05/30(水) 10:44:08
>>349

入力を実数でも整数でも対応できるプログラムを作りたいのです
360デフォルトの名無しさん:2007/05/30(水) 10:45:19
>>1
>・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
361デフォルトの名無しさん:2007/05/30(水) 10:48:57
>>359
整数も実数の部分集合なんだが・・・
問題はきちんと書きなよ
362デフォルトの名無しさん:2007/05/30(水) 10:51:13
363デフォルトの名無しさん:2007/05/30(水) 12:00:35
今現在、main関数を習っていますが次の問題がわかりません。
よろしくお願いします。
[1] 授業単元: C
[2] 問題文(含コード&リンク):
実数xを引数として受け取り、y=x*x*x-3*x*x-6*x+8を計算し、yの値が正の場合は1を、
  負の場合は-1を、0の場合は0を返す(戻り値は整数型)を作成し、その関数が正常に
  動作するかを、実際に実行して確認せよ。但し、main関数では、xの値をキーボードから
  入力し、関数を呼び出した後は、戻り値の値を出力せよ。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C
[4] 期限: 2007,5,31
[5] その他の制限: なし
364デフォルトの名無しさん:2007/05/30(水) 12:18:55
>363
#include <stdio.h>
int f(double x)
{
double y = x * x * x - 3 * x * x - 6 * x + 8;
if(y<0) return -1;
if(y>0) return 1;
return 0;
}

int main(void)
{
double x;

scanf("%lf", &x);

printf("%d", f(x));

return 0;
}
365デフォルトの名無しさん:2007/05/30(水) 12:25:19
OS: Windows XP
コンパイラ名とバージョン:ボーランド
言語: C
[4] 期限:今日の1時30分まで
[5]
問題1
番号と得点を入力し、平均点、最高得点取得の番号・得点・最低点取得者の番号・得点を表示しなさい
番号に0が入力されたらデータの終了とする
実行画面
番号,得点==>1,72
番号,得点==>2,60
番号,得点==>3,88
番号,得点==>4,48
番号,得点==>6,91
番号,得点==>7,75
番号,得点==>8,96
番号,得点==>10,52
番号,得点==>0,0
平均点:72.8
最高点 番号:8  得点:96
最低点 番号:4  得点:48

この問題どうしてもわからないのでよろしくお願いします 
366356のスレ主です:2007/05/30(水) 12:26:25
付けたしで繰り返し処理(while文)で作成してください
367デフォルトの名無しさん:2007/05/30(水) 12:31:18
すいません。>>332お願いできませんか?
368デフォルトの名無しさん:2007/05/30(水) 12:36:10
>>367
#include <stdio.h>
int main(void)
{
char a[]="自分野姓名";
printf("%s",a);
return 0;
}
369デフォルトの名無しさん:2007/05/30(水) 12:36:59
[1] 授業単元: C
与えられた文字列に含まれる数字の個数を数えて、返す関数 int countnum(char s[]) を作成しなさい.
この問題では,以下のプログラムの雛形を用い,countnum 関数内だけ変更しなさい(それ以外は一切変更しないこと).

文字列は英字,数字,記号で構成されるものとする
isdigit関数を利用しないこと

関数の定義
int countnum(char s[])
第一引数は文字列
戻り値は数字の個数

#include <stdio.h>
int countnum(char []);
int main(void){
char str[16];
fgets(str,16,stdin);
printf("The number of numerals is %d.\n", countnum(str));
fgets(str,16,stdin);
printf("The number of numerals is %d.\n", countnum(str));
return 0;
}
int countnum(char s[])
{
/* ここを作成する */
/* ここ(中括弧内)以外は変更してはいけない */
}

期限はとくにないです。よろしくおねがいします。
370デフォルトの名無しさん:2007/05/30(水) 12:42:07
>>369
int countnum(char s[])
{
int cnt=0;
while( *s!=NULL ) {
if( *s>='0' && *s<='9' ) cnt++;
s++;
}
return cnt;
}
371デフォルトの名無しさん:2007/05/30(水) 12:42:55
キーボードから入力した文字列を反転(逆に並べ替える)プログラムを作成しなさい.

入力する文字列の長さは最大で32文字までとしてよい.
文字列の長さを求めるのに、strlen関数を使ってもよい.

#include <stdio.h>
#include<string.h>
#include <stdlib.h>
void reverse(char[]);

int main(void)
{
char buf[33];

fgets(buf, 33, stdin);
buf[(strlen(buf)-1)] = '\0';

reverse(buf);
printf("%s\n", buf);

return 0;
}

void reverse(char s[])
{
/* ここを作成する */
/* ここ(中括弧内)以外は変更してはいけない */
}


2問もきいてしまってすいません。どなたかおねがいします。
372デフォルトの名無しさん:2007/05/30(水) 12:43:40
>>370さん ありがとうございます。
373デフォルトの名無しさん:2007/05/30(水) 12:47:55
void reverse(char s[])
{
int i, len = strlen(s);
for(i=0; i<len / 2; i++) {
char temp = s[i];
s[i] = s[len-i-1];
s[len-1-i] = temp;
}
}
374デフォルトの名無しさん:2007/05/30(水) 12:50:24
>>371
void reverse(char s[])
{
int i,sz=strlen(s)-1;
char tmp;
for(i=0; i<=sz/2; i++) {
tmp=s[i];
s[i]=s[sz-i];
s[sz-i]=tmp;
}
}
375デフォルトの名無しさん:2007/05/30(水) 12:52:16
>>373さん 374さん

ありがとうございました。
376デフォルトの名無しさん:2007/05/30(水) 12:56:29
>364
ありがとうございます。
大体の流れはわかったのですが、if文におけるreturnは使ったことないのですけど
ほかの方法はありますか?
お願いいたします。
377デフォルトの名無しさん:2007/05/30(水) 13:01:53
>>364 >>376
int f(double x)
{
double y = x * x * x - 3 * x * x - 6 * x + 8;
int n=0;
if(y<0) n=-1;
if(y>0) n=1;
return n;
}
378デフォルトの名無しさん:2007/05/30(水) 13:05:19
っつか、無駄な評価を省くなら
if(y<0) n=-1;
else if(y>0) n=1;
elseを入れておくと良いかと。
379デフォルトの名無しさん:2007/05/30(水) 13:08:17
>>364 >>377
詳しい回答ありがとうございます。
とても助かりました。
380デフォルトの名無しさん:2007/05/30(水) 13:55:57 BE:77640285-2BP(222)
>if文におけるreturnは使ったことないのですけど

使ったこと無いと何か問題があるのかね。
381デフォルトの名無しさん:2007/05/30(水) 14:00:53
>>311
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4112.txt

あまり動作確認をしていないので、>>311が充分に動作確認をしてくれ。
382デフォルトの名無しさん:2007/05/30(水) 14:43:34
#include <stdio.h>
int f(double x)
{
int ret = 0;
double y = x * x * x - 3 * x * x - 6 * x + 8;
if(y<0) ret = ret - 1;
if(y>0) ret = ret + 1;;
return ret;
}

こうしろって事なんだろうか。
頭悪すぎる変更だが。
383デフォルトの名無しさん:2007/05/30(水) 15:02:28
>>380
>>356
>>352
>>347
↑こいつらうるせー。つまらねーことを疑問に思うのは自由だがいちいちうるせーよ。黙ってろ
理解力のないボケが
384デフォルトの名無しさん:2007/05/30(水) 15:19:12
>>383
お?鮮人が逆ギレしてら(笑)
385315:2007/05/30(水) 15:30:55
y軸対象、お願いします
386デフォルトの名無しさん:2007/05/30(水) 15:52:05
for(i=0; i<h; i++)
{
for(j=0; j<=h; j++)
{
if(x[i][h-j]%2==1)
printf("@");
else
printf(" ");
}
printf("\n");
}
387デフォルトの名無しさん:2007/05/30(水) 16:23:53
C言語です。
課題@
配列x[4][4]に整数が格納されている。以下のプログラムを作れ。
@x[i][j]の i+j=0ならy[i][j]=x[i][j]/16
Ai+j=1なら y[i][j]=x[i][j]/12
B 2<=(小なりイコールです)i+j<=5(小なりイコールです)なら y[i][j]=x[i][j]/32
C i+j>5なら y[i][j]=x[i][j]/100
D入力された配列x[i][j]と変換された配列y[i][j]を出力しなさい。
x[4][4]={260,45,-16,5,-79,36,-2,-7,0,-16,3,-2,-8,-4,5,-4}
ただし,小数点第2位まで示せ。
課題A
y[i][j]=x[i][j]*z[i][j]を計算して出力せよ。
z[i][j]={16,12,32,100,12,32,100,100,32,100,100,100,100,100,100,100}
do,if,for,while習いました。
お願いしますm(_ _)m
388デフォルトの名無しさん:2007/05/30(水) 16:34:15
>>1読んでテンプレ使おうぜ
389webmaster@気まぐれアナスイ:2007/05/30(水) 16:36:27
(y = z(x = z) = (z[i]=[1000111001001] == z[j]=[111001001]));
390デフォルトの名無しさん:2007/05/30(水) 16:38:13
>387
課題1
#include <stdio.h>
int main(void)
{
double x[4][4]={260,45,-16,5,-79,36,-2,-7,0,-16,3,-2,-8,-4,5,-4}, y[4][4];
int i, j;
for(i=0; i<4; i++) {
for(j=0; j<4; j++) {
switch(i+j) {
case 0:y[i][j] = x[i][j] / 16;
break;
case 1:y[i][j] = x[i][j] / 12;
break;
case 2:case 3:case 4:case 5:
y[i][j] = x[i][j] / 32;
break;
case 6:y[i][j] = x[i][j] / 100;
break;
}
}
}
for(i=0; i<4; i++) {
for(j=0; j<4; j++) printf("%.2f ", y[i][j]);
putchar('\n');
}
return 0;
}
391デフォルトの名無しさん:2007/05/30(水) 16:48:12
>387
課題2
#include <stdio.h>
int main(void)
{
int x[4][4]={260,45,-16,5,-79,36,-2,-7,0,-16,3,-2,-8,-4,5,-4};
int z[4][4]={16,12,32,100,12,32,100,100,32,100,100,100,100,100,100,100};
int i, j, y[4][4];
for(i=0; i<4; i++) for(j=0; j<4; j++) y[i][j] = x[i][j] * z[i][j];
for(i=0; i<4; i++) {
for(j=0; j<4; j++) printf("%5d ", y[i][j]);
putchar('\n');
}
return 0;
}
392デフォルトの名無しさん:2007/05/30(水) 17:05:21
>>357,358
関数の定義をすればコンパイルできのでしょうか?
393デフォルトの名無しさん:2007/05/30(水) 17:08:01
実行ファイルを作るのは リンク
実行ファイルを作る為の中間ファイルを作るのが コンパイル
394webmaster@気まぐれアナスイ:2007/05/30(水) 17:08:04
#include <stlib.h>
int main();
voild
{
double
x[][]=y[][]{260,45,-16,5,-79,36,-2,-7,0,-16,3,-2,-8,-4,5,-4}
int for (i=[4 != ++],j=[4 != ++],switch[i+j]);
case y[i][j] = x[i][j] / 16
break
{
case (1:y[i][j] = x[i][j]/12 [2:3:4:5]
y[i][j] = x[i][j]/32
6:y[i][j] = x[i][j]/100
for i=4,++
for j=4,++
????? %,2f
putchar (\n));
}
return;
}
395デフォルトの名無しさん:2007/05/30(水) 17:25:27
>>393
すみません。よくわかってないです。
とにかく
#include <>
で関数を定義すればいいんですかね?
396デフォルトの名無しさん:2007/05/30(水) 17:41:03
いいえ。
>>355 の結果は「コンパイル出来たが、リンク出来なかった」

リンクできるようにするためには、
 ・ コンパイラの設定をする(ライブラリとして popup等の本体が居るファイルがある)
 ・ popup等のソースがあるなら、それもコンパイルしてリンクする
のいずれか。
つまり、 #include とかで解決できるような代物ではない。

popup等が標準の関数ではないので、俺らはそれ以上答えようがないっつーことだ
397デフォルトの名無しさん:2007/05/30(水) 17:51:21
>>396
ありがとうございます。
とりあずコンパイラの設定をやってみます
398 ◆GmgU93SCyE :2007/05/30(水) 18:27:25
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:borland
 [3.3] 言語: C
[4] 期限: 2007年5月30日24:00まで
[5] その他の制限:なし

問題:80〜120の間の整数となる100個の乱数を発生させ、その乱数を用いて何かを行え。ゲームでも、シミュレーション、占い等、何でもよい。
   
   全然分かりません。お願いします。


   

   


399デフォルトの名無しさん:2007/05/30(水) 18:39:09
[1] 授業単元: C言語
問題
入力ファイル(テキストファイル)の中の単語の長さを調べてその頻度 を表示するプログラムを作れ。
ただし、単語の定義は空白、タブ、改行、 ピリオド(.)、コンマ(,)を含まない文字列の固まりとする。
また、ピリオドとコンマは長さ0の単語としてカウントせよ。
また、20文字以上はまとめてカウントせよ。
3] 環境
 [3.1] OS: MacOSX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:5月31日までにお願いします
この前やってもらったのですが、配列をつかわないとダメだといわれました。
申し訳ないですけど、またお願いします。
400デフォルトの名無しさん:2007/05/30(水) 18:52:43
実行結果を記しなさい。

#include <stdio.h>
int main(void) {
char data[] = "Hello world!";
char *p = data;
int i = 0;
while(*p != '\0') {
printf("%c %d\n", *p, i);
i++;
p++;
}
printf("%d\n", i);
return(0);
}
401デフォルトの名無しさん:2007/05/30(水) 18:53:54
↑質問プレ使うの忘れました。すみません。
402デフォルトの名無しさん:2007/05/30(水) 18:55:57
質問だったのか・・・
っていうか実行してみりゃ分かるじゃん
403デフォルトの名無しさん:2007/05/30(水) 19:04:23
H 0
e 1
l 2
l 3
o 4
5
w 6
o 7
r 8
l 9
d 10
! 11
12
404デフォルトの名無しさん:2007/05/30(水) 19:07:20
*p使うんならiじゃなくてp-dataにすりゃいいのに。
i使うんなら*pじゃなくてdata[i]でいいだろうに。
405デフォルトの名無しさん:2007/05/30(水) 19:24:02
自然対数の底eを1000桁求めるプログラムを作成してください。e^xをマクローリン展開
した
   e^x=1+x/1!+x^2/2!+…+x^n/n!+…
において、x=1とおいた式を計算するとよいでしょう。

環境
  OS:Linux
 コンパイラ名とバージョン:gcc
 言語: C
 期限: 2007/6/4まで

ネット上にプログラムの例などがあるのですが、難しくてわかりません・・・。
わかりやすく説明をつけて教えてもらえればありがたいです<(_ _)>
406デフォルトの名無しさん:2007/05/30(水) 19:52:13
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):

実行結果を予想を記述

int main(void) {
int data[] = {0, 1, 2, 3, 4, 5, 10, 20, 30, 40};
int *p;
p = &data[2];
printf("%d\n", *(p+1));
printf("%d\n", &data[8]-&data[4]);
return(0);
}

#include <stdio.h>
#define N 10
int main(void) {
int data[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int i, size = N;
for (i = 0; i < N; i++) {
printf("%d\n", *(data+i));
}
return(0);
}

[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限:できるだけ早くお願いします
407デフォルトの名無しさん:2007/05/30(水) 20:02:29
>>406
【1番目のプログラム結果予想】
3
(data[8]のアドレス値からdata[4]のアドレス値を引いた値)

【2番目のプログラム結果予想】
1
2
3
4
5
6
7
8
9
10


「予想」なので実行はしていない。間違っていたらゴメンw
408デフォルトの名無しさん:2007/05/30(水) 20:31:30
>>399
>>314なら配列は使ってるが?
409デフォルトの名無しさん:2007/05/30(水) 20:41:50
>>398
神経衰弱見たいなゲーム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4113.c

>>405
それ宿題?e^1を1000桁求めろって普通のC言語の講義じゃやらないような希ガス
多倍長演算ライブラリや巧妙なアルゴリズムが無いとムリポ
/*
階乗部分は猛烈な勢いで大きくなってオーバーフロー
項が進むに連れ項の値が猛烈な勢いで小さくなって
計算機イプシロンを下回る。これ以上やっても、もう意味ないよ。
全く、テーラー展開は地獄だぜ!
*/
410デフォルトの名無しさん:2007/05/30(水) 21:05:44
もう一回おしえてください。
コマンドラインで指定する正の整数nについて,1^2 + 2^2 + 3^2 + · · · + n^2 の値を求めるプログラム
% ./kadai6-4
引数(正の整数) を指定してください.
% ./kadai6-4 1 2
引数(正の整数) を1 つだけ指定してください.
% ./kadai6-4 17
1 から17 までの2 乗和は1785 です.
%
411デフォルトの名無しさん:2007/05/30(水) 21:24:16
>>405
その難しくてわからないプログラムの例ぷりーず
412デフォルトの名無しさん:2007/05/30(水) 21:25:18
課題
このプログラムをベースに入力する秒数を実数にして時間・分・秒数に変換するプログラムをC言語で作成する
教えてください

♯include <stdio.h>
intmain(void)
{
int ji,fun,byou;

printf("秒数=")
scanf("%d",&byou);
ji=byou/3600;
byou=byou%3600;
fun=byou/60;
byou=byou%60;

printf("%d時間%d分%d秒\n",ji,fun,byou);

return0;
}
413デフォルトの名無しさん:2007/05/30(水) 21:28:58
>>412 マルチ
414デフォルトの名無しさん:2007/05/30(水) 21:32:33
そのうえ、#だ
415410:2007/05/30(水) 21:56:20
たのむ教えて
416デフォルトの名無しさん:2007/05/30(水) 22:10:35
ジョブショップ型生産のプログラムだれか作って!!
417デフォルトの名無しさん:2007/05/30(水) 22:15:57
>>416
だからスレ違いだっての
もし宿題だというなら>>1のテンプレ埋めれ
418デフォルトの名無しさん:2007/05/30(水) 22:23:41
>>412
上のほうにもあるけど問題の意味が分からないから
誰も答えないと思うよ
419デフォルトの名無しさん:2007/05/30(水) 22:34:11
>>405
1000桁じゃなくて1000項の間違いとかじゃない?

あと階乗の計算はあっという間にオーバーフローするから
例えばx^5/5!とかだったら (x / 5) * (x / 4) * (x / 3) * (x / 2) * (x / 1) って細かく計算すれば出来ると思う
420デフォルトの名無しさん:2007/05/30(水) 22:50:13
>>418
問題の意味じゃなくて
お前の理解力が足りないだけなんだろうが(藁
421デフォルトの名無しさん:2007/05/30(水) 22:54:18
>>419
その手があったか。計算量は増えるけど、今のPCなら無問題だな。
ただ、納得できないのは、doubleの範囲なら1000項もやる必要無いような。
まるで、ピースの欠けたパズルをやっている気分だ。
ピースの欠けたパズルは、どうせ完成しないんだから諦めた方が良いな。
>>412も全てのピースを渡さずにパズルを完成させてくれと言っているようなものだな。
422デフォルトの名無しさん:2007/05/30(水) 23:00:58
>>420
(´,_ゝ`)プッ
423デフォルトの名無しさん:2007/05/30(水) 23:03:25
>>405
参考に
double TaylorExp(double x)
{
double a = x;
double buf , k;
double kou , ret = 0.0;
int i , flag = 0;
enum {POW_K = 1000};
const double INCREMENT = 1e-16;

if(x<0.0) { a = -x; flag = 1; }
if(a > 20.0)
{
buf = a;
for(k = 1.0+INCREMENT ; buf > 20.0 ;k+=INCREMENT) buf = a / ( pow(POW_K,k) );
a = buf;
ret = (flag==0) ? pow( TaylorExp(a) , pow(POW_K,k) ) : 1/pow( TaylorExp(a) , pow(POW_K,k) );
return ret;
}

kou = 1;
for(i=1 ; kou>(1e-20) && i<=128 ; i++)
{
ret += kou;
kou *= a / i;
}
return (flag==0) ? ret : 1/(ret);
424デフォルトの名無しさん:2007/05/30(水) 23:05:05
>>422
(・∀・)ニヤニヤ
425デフォルトの名無しさん:2007/05/30(水) 23:13:47
>>405
遅延評価っぽい方法で強引に計算(見事にスパゲティ).
結果が正しいかは確かめてない.
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4114.c
426デフォルトの名無しさん:2007/05/30(水) 23:22:18
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):

キーボードから入力された任意個の整数について偶数の個数を求めるプログラムを作成しなさい.このプログラムでは,最初に判定する整数の個数を入力し,次のその個数分の整数を繰り返し入力するものとする.

./counte
5
4
3
2
1
0
3

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:borland
 [3.3] 言語: C
[4] 期限:
個数を指定するときに0以下の数が入力された場合,何も表示せず直ちに終了すること


427デフォルトの名無しさん:2007/05/30(水) 23:31:08
>>426
#include <stdio.h>

int main(void)
{
int num = 0, i, d = 0, even = 0;

scanf("%d", &num);
if(num <= 0) return -1;
for(i=0; i<num; i++)
{
scanf("%d", &d);
if(d % 2 == 0) even++;
}
printf("偶数の個数:%d", even);
return 0;
}
428デフォルトの名無しさん:2007/05/30(水) 23:34:49
>>427
ありがとうございます。
429デフォルトの名無しさん:2007/05/31(木) 01:01:01
汚いコードだなw
無能乙wwwwwwwwwwwwwwwwwww
430デフォルトの名無しさん:2007/05/31(木) 01:08:44

[1] 授業単元:C言語
[2] 問題文(含コード&リンク): int i; で宣言された変数 i のアドレスをprintf() を用いて表示しなさい。
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
431デフォルトの名無しさん:2007/05/31(木) 01:11:31
>>430
#include <stdio.h>
int main(void) {
int i;
printf("&i = %p", &i);
return 0;
}
432デフォルトの名無しさん:2007/05/31(木) 01:13:04
>>429
wの数じゃなくてコードでどれくらい無能なのか示してやれよ
433デフォルトの名無しさん:2007/05/31(木) 01:16:19
>>431
ありがとうございました。
434デフォルトの名無しさん:2007/05/31(木) 04:08:51
「自然数nが自然数であるかどうかを調べるプログラムを作成し、
それを利用して1〜100までの素数をすべて列挙せよ」
こいつがどうしても分かりません。そもそも素数をどうやって求めるか
わからん。誰か助けてー
435デフォルトの名無しさん:2007/05/31(木) 04:24:19
自然数nは調べるまでもなく自然数。
436デフォルトの名無しさん:2007/05/31(木) 06:35:19
自然、天然に対して人工ってのがある。人工数というのを誰か発見してくれ。
437254:2007/05/31(木) 06:42:06
>>436
っ 負数
438デフォルトの名無しさん:2007/05/31(木) 07:26:46

[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:Windows
コンパイラ名とバージョン:borland
言語:C

問題テーマ:繰り返し処理(for文)
問題1 
数値を入力し、以下のように表示しなさい
実行画面
整数入力==>8
********
*******
******
*****
****
***
**
*

問題2
10進数を入力し8ビットの2進数に変換し表示しなさい
実行画面
10進数入力==>118
2進数:01110110

宜しくお願いします
439254:2007/05/31(木) 07:36:50
>>438
問題1
#include<stdio.h>
int main(void){
  int i, n;
  printf("整数入力==>");
  scanf("%d", &n);
  for(;n>0;n--){
    for(i=0;i<n;i++) printf("*");
    printf("\n");
  }
  return 0;
}

問題2
#include<stdio.h>
int main(void){
  int i, n;
  printf("10進数入力==>");
  scanf("%d", &n);
  for(i=8-1;i>=0;i--) printf("%d", (n>>i)&1);
  printf("\n");
  return 0;
}
440デフォルトの名無しさん:2007/05/31(木) 09:39:06
>>434
まずは素数についてググってみては?
441デフォルトの名無しさん:2007/05/31(木) 09:44:51
http://ja.wikipedia.org/wiki/%E8%87%AA%E7%84%B6%E6%95%B0
まぁ、0を除いて正の整数とすることもあれば、0を入れる、あるいは負の整数を入れることもあるそうな。
>>434の1〜100という範囲からして、正の整数かどうか判別をしてからそれが素数か調べろってことか?
442デフォルトの名無しさん:2007/05/31(木) 09:56:55
<<285

よろしくお願いします。
443デフォルトの名無しさん:2007/05/31(木) 10:36:34
>>434
1〜100程度なら、1除いてxが2〜n-1まででn%x==0であるxが存在しないnが素数なんじゃね?
444デフォルトの名無しさん:2007/05/31(木) 11:04:30
とりあえず、1〜100までの整数から素数を求めるものなんてありきたりだから、探せと?
445デフォルトの名無しさん:2007/05/31(木) 11:12:42
宿題を片付けて欲しいというより、
素数を求める方法を知りたいような
レスの書き方だったからかな
446デフォルトの名無しさん:2007/05/31(木) 11:40:50
>434
#include <stdio.h>
int isprime(int n)
{
   int i;
   if(n<2) return 0;
   for(i=2; i*i<=n; i++) if(n%i==0) return 0;
   return 1;
}
int main(void)
{
   int i;
   for(i=1; i<=100; i++) if(isprime(i)) printf("%3d", i);
   return 0;
}
447デフォルトの名無しさん:2007/05/31(木) 11:47:12
授業単元:C言語
問題文(含コード&リンク):
環境
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:繰り返し処理(while文)
問題1:キーボードより整数nを入力し、1〜nまでの合計を求めなさい
実行画面
整数nの入力==>5
合計:15
宜しくお願いします
448デフォルトの名無しさん:2007/05/31(木) 11:47:41
催促するのはなしにしよーぜ。
449デフォルトの名無しさん:2007/05/31(木) 11:49:16
>447
>345
450デフォルトの名無しさん:2007/05/31(木) 12:20:47
OS: Windows XP
コンパイラ名とバージョン:ボーランド
言語: C
[4] 期限:今日の1時30分まで
テーマ:繰り返し(while文)
問題1
番号と得点を入力し、平均点、最高得点取得の番号・得点・最低点取得者の番号・得点を表示しなさい
番号に0が入力されたらデータの終了とする
実行画面
番号,得点==>1,72
番号,得点==>2,60
番号,得点==>3,88
番号,得点==>4,48
番号,得点==>6,91
番号,得点==>7,75
番号,得点==>8,96
番号,得点==>10,52
番号,得点==>0,0
平均点:72.8
最高点 番号:8  得点:96
最低点 番号:4  得点:48

この問題どうしてもわからないのでよろしくお願いします 

451デフォルトの名無しさん:2007/05/31(木) 12:28:18
>>390さん、ありがとうございます。
452デフォルトの名無しさん:2007/05/31(木) 12:33:47
授業単元 再帰プログラミング

OS:WindowsXP
コンパイラ名:ボーランド
言語:C言語
期限:来週の火曜日までにお願いします

問題はソースコードの改良なのですが、ソースコードは長いので後から送信します

横8マス縦8マスのチェス盤を考え、今左下にナイトが置かれているとする。
このプログラムはこのナイトを右上に移動させるための順序を表示するプログラムである。
このプログラムを改良し、ナイトが同じマスを通らない順序だけを表示するようにせよ。

教師の説明によると再帰レベルの限界は12で
配列gboard[ ][ ]を使って一度訪れた場所に印をつければ解けるとのことでした。

よろしくお願いします
453452:2007/05/31(木) 12:36:04
#include<stdio.h>
#include<stdio.h>
#define DLIMIT 12
#define XSIZE 8
#define YSIZE 8

int gboard[XSIZE][YSIZE];
int gxpos[DLIMIT];
int gypos[DLIMIT];
int i;

454452:2007/05/31(木) 12:37:08
void knight_move(int x,int y,int depth){
if(depth>=DLIMIT)goto jump;
if(x<0)goto jump;
if(x>=XSIZE)goto jump;
if(y<0)goto jump;
if(y>=YSIZE)goto jump;
gxpos[depth]=x;
gypos[depth]=y;
if(x==7 && y==7){
for(i=0;i<=depth;i++){
printf("(%d,%d)",gxpos[i],gypos[i]);
}
printf("GOAL\n");
goto jump;
}

knight_move(x+1,y+2,depth+1);
knight_move(x+2,y+1,depth+1);
knight_move(x+2,y-1,depth+1);
knight_move(x+1,y-2,depth+1);
knight_move(x-1,y-2,depth+1);
knight_move(x-2,y-1,depth+1);
knight_move(x-2,y+1,depth+1);
knight_move(x-1,y+2,depth+1);

jump:
;
}

int main(){
knight_move(0,0,0);
}
455デフォルトの名無しさん:2007/05/31(木) 12:41:33
OS: Windows XP
コンパイラ名とバージョン:ボーランド
言語: C
[4] 期限:今日の1時30分
テーマ:判断処理(if文)
問題1キーボードより2つの値を入力し、比較結果を表示しなさい
実行画面
変数aの入力==>3
変数bの入力==>8
結果:3<8

変数aの入力==>8
変数bの入力==>3
結果:8>3

変数aの入力==>5
変数bの入力==>5
結果:5=5


456デフォルトの名無しさん:2007/05/31(木) 12:46:25
>>455
#include <stdio.h>
int main(void)
{
int a, b;
printf("変数aの入力==>");scanf("%d", &a);
printf("変数bの入力==>");scanf("%d", &b);
printf("結果:%d%c%d", a, (a == b ? '=' : (a > b ? '>' : '<')), b);
return 0;
}
457425:2007/05/31(木) 12:53:54
>>405
さすがに昨日のコードはアホ過ぎるので,もう少しまともなやつを書いた
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4117.c
458デフォルトの名無しさん:2007/05/31(木) 12:57:43 BE:46584746-2BP(222)
>>447
#include<stdio.h>
#include<stdlib.h>
int main(){char tmp[256];int s,n=0;while(n>0){printf("整数の入力:");fgets(tmp,256,stdin);
n=atoi(tmp); s=n*(n+1)/2;printf("合計:%i\n", s);} return 0;}
459 ◆GmgU93SCyE :2007/05/31(木) 12:59:49
>>409
無事間に合うことができました。ありがとうございました!
460デフォルトの名無しさん:2007/05/31(木) 13:02:46
>>450
#include <stdio.h>

int main(void)
{
int num = 1, mark = 0, sum = 0, pop = 0;
int MaxNum = -1, MaxMark = -1;
int MinNum = -1, MinMark = 10000;
for(;;)
{
printf("番号,得点==>");
scanf("%d,%d", &num, &mark);
if(num == 0) break;
sum += mark;
pop++;
if(mark > MaxMark){MaxNum = num; MaxMark = mark;}
if(mark < MinMark){MinNum = num; MinMark = mark;}
}
printf("平均点:%g\n", (double)sum / (double)pop);
printf("最高点 番号:%d  得点:%d\n", MaxNum, MaxMark);
printf("最低点 番号:%d  得点:%d\n", MinNum, MinMark);
return 0;
}
461デフォルトの名無しさん:2007/05/31(木) 13:03:25 BE:87345959-2BP(222)
>>455
#include<stdio.h>
#include<stdlib.h>
int main(void){int a,b;char tmp[256];printf("変数aの入力==>");fgets(tmp,256,stdin);
a=atoi(tmp);printf("変数bの入力==>");fgets(tmp,256,stdin);b=atoi(tmp);
printf("結果:%i%c%i\n",a,(a>b)?'>':((a<b)?'<':'='),b);return 0;}
462デフォルトの名無しさん:2007/05/31(木) 13:40:43
>>452
#include<stdio.h>
#include<memory.h>
#define DLIMIT 12
#define XSIZE 8
#define YSIZE 8
int gboard[XSIZE*YSIZE];int gxpos[DLIMIT];int gypos[DLIMIT];int i;
void knight_move(int x,int y,int depth){
if(depth > DLIMIT ){memset( gboard , 0 , sizeof( gboard ) );return;}
if(gboard[x*YSIZE+y] ){memset( gboard , 0 , sizeof( gboard ) );return;}
if(x < 0 ){ return; }if(x >= XSIZE ){ return; }if(y < 0 ){ return; }if(y >= YSIZE ){ return; }
gxpos[depth]=x;gypos[depth]=y;gboard[x*YSIZE+y] = true;
if(x==7 && y==7){for(i=0;i<=depth;i++){printf("(%d,%d)",gxpos[i],gypos[i]);}printf("GOAL\n");memset( gboard , 0 , sizeof( gboard ) );return;}
knight_move(x+1,y+2,depth+1);knight_move(x+2,y+1,depth+1);knight_move(x+2,y-1,depth+1);knight_move(x+1,y-2,depth+1);
knight_move(x-1,y-2,depth+1);knight_move(x-2,y-1,depth+1);knight_move(x-2,y+1,depth+1);knight_move(x-1,y+2,depth+1);}
int main(){memset( gboard , 0 , sizeof( gboard ) );knight_move(0,0,0);}

BCCで動くかシラネ
あってるかもシラネw
463デフォルトの名無しさん:2007/05/31(木) 14:22:07
この問題なんですが、よろしくお願いします。

キーボードより2以上の任意の整数を入力すると,入力された数の全ての素因数を表示するプログラムを作成せよ.

<ヒント>

・素因数…素数(1及びその数自身でしか割り切れない)の約数のこと.

・配列は使わなくても実現できる.使っても良い.

・実現方法がかわらない場合は,下記の処理の流れを参考にすると良い.

(@) キーボードから入力された数を「もとの数」とする.

(A) もとの数に対して「割る数」を2から順に「もとの数」に達するまで1ずつ増やしてゆく.

(B) 「もとの数」が「割る数」で割り切れれば,この「割る数」を因数として出力しつつ,左記の商を計算し,新たな「もとの数」とする.

(C) 割り切れる限り(B)を繰り返す.割り切れなくなった時点で(A)へ進む.



<実行例>

num = ? 30 ← キーボードから30と入力しているところ

30 = 2 × 3 × 5
464デフォルトの名無しさん:2007/05/31(木) 14:30:16
テンプレに従ってちょーだい
465452:2007/05/31(木) 14:30:16
>>462
残念ながら動作しませんでした。
お忙しい中ありがとうございました。
466デフォルトの名無しさん:2007/05/31(木) 14:35:58
>>411
#include <stdio.h>
#define LOG2_10 3.322

void e(int *data, int keta)
{
int i, j;
unsigned k, k2, n, s;
int len;
int *dap;
long x;

len = (keta-1) / 4 + 2;
for (dap = data, j = len; j--; ) *dap++ = 0;

n = keta * LOG2_10 + 1;
k = 1; k2 = 2;
s = 0; j = -1;
for (i = 1; s <= n; i++) {
if (i >= k) {
k = k2;
k2 <<= 1;
j++;
}
s += j;
}
467デフォルトの名無しさん:2007/05/31(木) 14:38:15
続きです。
*data = 1;
while (--i) {
x = 0;
for (j = len, dap = data; j--; ) {
x = x * 10000 + *dap;
*dap++ = x / i;
x %= i;
}
(*data)++;
}
}
468デフォルトの名無しさん:2007/05/31(木) 14:40:04
続きです。
int main(void)
{
int i, keta;
static int data[3000];

printf("--- 自然対数の底 e の値を算出します ---\n");
printf("小数点以下何桁まで計算しますか ?\n");
scanf("%d", &keta);

e(data, keta);

printf("自然対数の底 e = \n");
printf("%1d.", data[0]);
for (i = 1; i <= (keta-1)/4+1; i++) {
printf("%04d ", data[i]);
if (i % 10 == 0) printf("\n ");
}
if (i % 10 != 1) printf("\n");
return 0;
}
わからない例の一つです。お願いします。
469デフォルトの名無しさん:2007/05/31(木) 14:41:00 BE:77640285-2BP(222)
470デフォルトの名無しさん:2007/05/31(木) 14:51:05 BE:52406993-2BP(222)
>「もとの数」に達するまで1ずつ増やしてゆく.

このバカ教官の名前を晒せ。
471デフォルトの名無しさん:2007/05/31(木) 15:51:09
[1] 授業単元:for 文 if文
[2] 問題文:a*bと入力したらaアスタリスクb と表示されるプログラム
[3.1] OS:WindowsXP
[3.2] Borland C++
[3.3] 言語:C++

472デフォルトの名無しさん:2007/05/31(木) 15:51:17
性帝トーマスっていう指導員です
473デフォルトの名無しさん:2007/05/31(木) 15:58:49
>>471
#include <stdio.h>
int main(void)
{
char buf[256]={"\0"};
size_t buf_sz=sizeof(buf)/sizeof(buf[0]),i;
printf("Input (%d文字以内) > ",buf_sz-1);
fgets(buf,sizeof(buf)/sizeof(buf[0]),stdin);

for(i=0; ; i++) {
if(i>buf_sz || buf[i]=='\0') break;
if(buf[i]=='*') printf("アスタリスク");
else putchar(buf[i]);
}
return 0;
}
474デフォルトの名無しさん:2007/05/31(木) 16:20:14 BE:87345195-2BP(222)
>>471
#include<stdio.h>
#include<string.h>
int main(void){char tmp[256];fgets(tmp,256,stdin);if(strcmp(tmp,"a*b")==0){
puts("aアスタリスクb");}return 0;}
475デフォルトの名無しさん:2007/05/31(木) 16:23:24
>>474
お前のクソースは脱糞もんだぜ、クソの臭いがぷんぷんすんぜ!
476デフォルトの名無しさん:2007/05/31(木) 16:23:47
授業単元:C言語
問題文(含コード&リンク):
環境
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:繰り返し処理(while文)
問題1:キーボードより整数nを入力し、1〜nまでの合計を求めなさい
実行画面
整数nの入力==>5
合計:15
何方か簡単なプログラム作っていただけませんか?
477デフォルトの名無しさん:2007/05/31(木) 16:29:31 BE:69876566-2BP(222)
478デフォルトの名無しさん:2007/05/31(木) 16:30:29 BE:34937892-2BP(222)
>>475
何か問題があるなら具体的にどうぞ。
479デフォルトの名無しさん:2007/05/31(木) 16:32:32
>>478
問題があるとは言った覚えはないが?w
480デフォルトの名無しさん:2007/05/31(木) 16:34:27 BE:38820645-2BP(222)
>>479
だから何?
481デフォルトの名無しさん:2007/05/31(木) 16:35:11 BE:67935757-2BP(222)
クソの臭いがするのが問題ではないという>>475は肥だめの中で生活してるんだろう。
482デフォルトの名無しさん:2007/05/31(木) 16:36:57
>>476
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n,a=1,d=1,sum;
char buf[256]={"\0"};
size_t buf_sz=sizeof(buf)/sizeof(buf[0]),i;
printf("整数nの入力==>");
fgets(buf,buf_sz,stdin);
n=atoi(buf);
sum= (n*(2*a+(n-1)*d)) / 2;
printf("童貞:%d",sum);
return 0;
}
483デフォルトの名無しさん:2007/05/31(木) 16:38:51
おいっ、腐れブラックリスト入り企業のトーマスが何ほざいてやがる?w
お前の言い分や言い返しのパターンは去年のやり取りで調査済みだよw
だからお前に投げかける言葉と、お前の必死こいたレスへの切り返しは出来るから
墓穴を掘る前にやめとけw
484デフォルトの名無しさん:2007/05/31(木) 16:40:07
>>447の課題は
> テーマ:繰り返し処理(while文)
っとあるから、whileを用いるのが条件なんだろうか?
はっきりしとけ。
485デフォルトの名無しさん:2007/05/31(木) 16:41:11
>>481
>>475は「問題が無い」とも言ってないと思うぞ。
つーかこのネタ回答何度目だよ。いいかげん飽きた。
もっと面白いネタ持ってきてくれよ。
486デフォルトの名無しさん:2007/05/31(木) 16:45:51 BE:58230465-2BP(222)
ネタ回答じゃねえ。仕様通りだよ。
487デフォルトの名無しさん:2007/05/31(木) 16:46:34
トーマス「何か問題でも?」
その他大勢「お前の存在そのものが大問題」
トーマス「何か問題でも?」
その他大勢「(スルー、無視、しかと)」
トーマス「俺のクソミソースを提出しやがれ、屁たれ質問者(ウホッ)」
その他大勢「まともなソースを書いてやっか」

>>485
問題があるとは書いてないようだが?お前も曲解して墓穴を掘るタイプだな。
どこをどう読んだら「問題あり」と読めるのか、説明を求む。まぁ、無理だよ。
書いてないものは書いてないからw 言ってない相手に言っただろは通用しない。
裁判じゃなおさら通用しない誘導尋問だなw
488デフォルトの名無しさん:2007/05/31(木) 16:46:37 BE:69876566-2BP(222)
>>483
ジャパン語で。
489デフォルトの名無しさん:2007/05/31(木) 16:47:20 BE:87345959-2BP(222)
>>487
俺は清潔な人間なので、クソの臭いがするのは問題だと思うんだな。
490デフォルトの名無しさん:2007/05/31(木) 16:49:36
問題だと思うんなら直せば?
491デフォルトの名無しさん:2007/05/31(木) 16:51:35
>>476 っつーわけで、whileを使ってみた。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int n,i=1,sum=0;
char buf[256]={"\0"};
size_t buf_sz=sizeof(buf)/sizeof(buf[0]);
printf("整数nの入力==>");
fgets(buf,buf_sz,stdin);
n=atoi(buf);
while(i<=n) sum+=i++;
printf("包茎:%d",sum);
return 0;
}
492デフォルトの名無しさん:2007/05/31(木) 16:55:00
去年の夏はFIFA WORLD CUP 2006があって楽しかったが、今年は窮地に立たされた
自民党がどこまで得票を維持できるか楽しめる参議院選挙があるねぇ。
トーマスさんよぉ、あんたの企業は自民党から甘い汁を吸わせてもらっているんかい?
まぁ、せいぜい自民党に媚を売ってクソミソースを世の標準にしてもらうんだなw
493デフォルトの名無しさん:2007/05/31(木) 16:55:03 BE:54348847-2BP(222)
>>490
だから「問題があるなら」な。現状、問題はない。
クソの臭いを嗅いでいるのは>>475だけしかいないみたいだし。
494デフォルトの名無しさん:2007/05/31(木) 16:55:32 BE:108696487-2BP(222)
>>492
ジャパン語で。
495デフォルトの名無しさん:2007/05/31(木) 17:00:33
>>493
わざわざ言う奴が>>475しか居なかっただけじゃね?
496デフォルトの名無しさん:2007/05/31(木) 17:08:19 BE:46585038-2BP(222)
そもそも、クソの臭いがするならまず身の回りを確認するはずだな。
もし掲示板上の書き込みからクソの臭いがするなら、神経科の受診が必要。
497デフォルトの名無しさん:2007/05/31(木) 17:09:30
クソース=問題あり とお前らが解釈していると思われるだけ。
まさか、誘導尋問をしたつもりが自分らが問題ありと思っていたことを露呈したとはw
おばかなソースで宿題スレにバカ集合ちゃらちゃ♪
わかったか?お前らが問題だと思っていたことが判明しただけ、こっちは問題があるとは言ってなし。
クソースと投げかけただけw
498デフォルトの名無しさん:2007/05/31(木) 17:14:58
>>475を何回読み直しても、無理だとわかっていて縦読みしても
問題あり の文字が浮かび出てこないのは一目瞭然だなw
499デフォルトの名無しさん:2007/05/31(木) 17:15:37 BE:139752689-2BP(222)
>>497
そもそもクソースって何語なんだ。
500デフォルトの名無しさん:2007/05/31(木) 17:16:16 BE:93168386-2BP(222)
>わかったか?お前らが問題だと思っていたことが判明しただけ、こっちは問題があるとは言ってなし。

え?
501デフォルトの名無しさん:2007/05/31(木) 17:17:26
やめとけ、お前のレスのパターンはお見通し。去年さんざんお前と言い合って
お前の性格はモロにバレてるからw 逆手にとって切り返して、お前がファビョるのも計算済みだよw
502デフォルトの名無しさん:2007/05/31(木) 17:20:24 BE:15528724-2BP(222)
>>501
つまりお前は去年論破されて勝利宣言した粘着私怨君なわけですかw
わざわざそんな恥ずかしい自己紹介しなくてもw
503デフォルトの名無しさん:2007/05/31(木) 17:23:57
このスレでケンカするな。
504デフォルトの名無しさん:2007/05/31(木) 17:24:53 BE:46585038-2BP(222)
俺はケンカなんかしたことはないけどな。
505デフォルトの名無しさん:2007/05/31(木) 17:32:21
ttp://www.nicovideo.jp/watch/sm358647
トーマスさんよぉ、↑これ作ってくれへんか?
506デフォルトの名無しさん:2007/05/31(木) 17:39:42
>>505
ちょっと待ってろ
507デフォルトの名無しさん:2007/05/31(木) 17:51:32
なんで荒れてんの?
508デフォルトの名無しさん:2007/05/31(木) 17:55:56
トーマスさんが納めた年金が所在のわからない5000万件の中に入っていたのが発覚してファビョってるから
509デフォルトの名無しさん:2007/05/31(木) 17:58:34 BE:34939229-2BP(222)
俺は最初から厚生年金だから問題なし。
510デフォルトの名無しさん:2007/05/31(木) 18:20:43
コマンドラインで指定する正の整数nについて,1^2 + 2^2 + 3^2 + · · · + n^2 の値を求める
プログラム おしえて
511デフォルトの名無しさん:2007/05/31(木) 18:48:49
[1] 授業単元:プログラミング演習U
[2] 問題文(含コード&リンク):
迷路探索
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4118.c
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 6月1日24:00
[5] その他の制限: 無し

どうか宜しくお願いします。
512デフォルトの名無しさん:2007/05/31(木) 18:54:05
っしゃ! >>505 のテーブルのセルを使ったバージョンのプログラムが完成したぜい!
ほしいかおめーら?やらねーよ(ペ
513デフォルトの名無しさん:2007/05/31(木) 19:01:38 BE:139752498-2BP(222)
>>510
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char* argv[]){double n;if(argc>1){n=atof(argv[1]);
printf("%.0f\n",(n*(n+1)*(2*n+1))/6);}return 0;}
514デフォルトの名無しさん:2007/05/31(木) 19:07:30
497もたいがいだな
515デフォルトの名無しさん:2007/05/31(木) 19:09:57 BE:54348847-2BP(222)
そりゃー1年前に論破されたのを根に持って未だに粘着してるくらいだからなぁ。
516デフォルトの名無しさん:2007/05/31(木) 19:27:34
[1] 授業単元:ユニット演習
[2] 問題文(含コード&リンク):
下記の実行結果を得るように,メイン関数の他に関数my_abs(double x);
my_pow(double x, double y); fact(double x); sum(double x); を記述しなさい.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4119.txt
実行結果1
x の値(整数)を入力してください.10 ..
y の値(整数)を入力してください.5 ..
x の入力値=> 10
y の入力値=> 5
10 の絶対値=> 10
5 の絶対値=> 5
10 の5 乗=> 100000
10 のFactorial => 3628800
5 のFactorial => 120
10 のSummation => 55
5 のSummation => 15
517デフォルトの名無しさん:2007/05/31(木) 19:28:22
実行結果2
x の値(整数)を入力してください.8 ..
y の値(整数)を入力してください.-7 ..
x の入力値=> 8
y の入力値=> -7
8 の絶対値=> 8
-7 の絶対値=> 7
8 の-7 乗=> 0.000000476837158
8 のFactorial => 40320
-7 のFactorial は計算できません.
8 のSummation => 36
-7 のSummation は計算できません.
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限
再来週の火曜辺りまで
[5] その他の制限
なし

どなたかおねがいします
518デフォルトの名無しさん:2007/05/31(木) 19:29:53
あらあら、いつの間にか論破されたことになっているしw
トーマスが論破できなかったんだよw
>>475 のどこに「問題あり」と書かれているか、説明していただこうw
今論破されているのはトーマスだねw
それから、お前に粘着した覚えはないなぁ。気持ち悪いからこっちからごめんだよw
お前が「何か問題でも?」ってレスしてくるのはすでに予測済みだったから
そことなく罠をはっておいてやったんだよ。そしたらお前は見事にハマって釣られたわけだw
残念だが論破とか勝ち負けを競っているようじゃ、まだまだこのおっさんもがきだなw
519デフォルトの名無しさん:2007/05/31(木) 19:31:28
あと、こんなクソスレに講師を批判するが、んじゃお前はまともな講師になれるのかと?
お前の会社が今、傾いて倒産しそうだから必死なのは分かるが、そんな強がりをしても
自民党はお前の会社は救っちゃくれないね。だから自民党以外の政党に投票しろや、な?w
520デフォルトの名無しさん:2007/05/31(木) 19:32:14
いつまでやってんだ
スレ違いだ他でやれ
521デフォルトの名無しさん:2007/05/31(木) 19:36:15
>>485が一番バカってことで。こいつ日本語もまともに読めないバカで
>>475に問題ありと書かれていることが読み取れるそうだ。
こいつのエスパーはただの妄想だな。
とりあえず日本語が出来ないトーマスは在日決定だろ。通りでくせぇわけだ
522デフォルトの名無しさん:2007/05/31(木) 19:40:10
通りで ×
道理で ○
在日乙
523510:2007/05/31(木) 19:41:46
for文使ったやり方でお願いします
524デフォルトの名無しさん:2007/05/31(木) 19:44:50
>・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
525デフォルトの名無しさん:2007/05/31(木) 19:46:47
521もたいがいだな
526デフォルトの名無しさん:2007/05/31(木) 19:47:39
>>523
テンプレ読んでやり直し
527デフォルトの名無しさん:2007/05/31(木) 20:30:00
>>522
もうその程度の変換ミスしかつつけなくなったかw
もっとやれ、そういうのをたたき出すのが目的だからw
528デフォルトの名無しさん:2007/05/31(木) 20:31:35
>>522
ところでさぁ、変換ミスのあら探しついでに、
>>475に問題ありと書かれているかどうかチェックしてくれへんか?w
お前の脳内妄想でじゃなくて、文字列の中からな。
後、下手にトーマスをかまうのもどうかとw
こいつがこのスレの荒らしの原因でもあるし。
529デフォルトの名無しさん:2007/05/31(木) 20:45:30
馬鹿が二人集まると荒れるな
530デフォルトの名無しさん:2007/05/31(木) 20:50:00
>>528
物事には
外面的側面から捉える手法と
内面的側面から捉える手法の2種類がある
どう頑張ったところで内面的側面を破棄することは出来ない


これ以上やりたいなら違うとこでやれ
531デフォルトの名無しさん:2007/05/31(木) 20:50:45
528もたいがいだな
532デフォルトの名無しさん:2007/05/31(木) 20:54:29
梅雨のせいか528のような中学生が出入りするスレになりましたね
533デフォルトの名無しさん:2007/05/31(木) 20:58:54
大学2年生です。

[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):

以下の条件をみたすプログラムを作成せよ。
整数、または少数を平均を求めるプログラム。
データーの整数、少数はmain関数の引数として入力すること。
平均の計算は自作関数heikinで行うこと。
結果の表示はmain関数内で行うこと。

[3] 環境
 [3.1] OS:Windows Xp
 [3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003
 [3.3] 言語:C言語
[4] 期限:2007年6月5日まで。
[5] その他の制限:この課題が出されたとき、fgets fpusあたりを習いました。
          制限は特にありません。

自分では解けませんでした。
よろしくお願いします。
534デフォルトの名無しさん:2007/05/31(木) 21:06:04
ここって分かりやすいボケで餌を与えると、見事に食いつくから笑えるよw
535デフォルトの名無しさん:2007/05/31(木) 21:42:46
なんだ?問題ありについて説明はなしか?まぁ、問題ありとはどこにも
書いてないんだよな、これがw
むしろそれでも良いって納得しているんだが?w
トーマスの書くクソースなんて、去年からとっくにどんなものか知っていたんだし。
まぁ、こちらが出した餌に食いついて、まさかこれ釣り針じゃないよね?って
食いついて喉から外れないで必死こいている釣られた奴が、トーマスの肩を持って
自分を慰めているから笑える。もちろんそれは釣り針であって餌は偽者のルアーでつよw
536デフォルトの名無しさん:2007/05/31(木) 21:48:05
おまつりだな
537デフォルトの名無しさん:2007/05/31(木) 21:50:03
いつものことです
538デフォルトの名無しさん:2007/05/31(木) 21:51:35
NG推奨ワード:問題あり
539デフォルトの名無しさん:2007/05/31(木) 22:03:02
>>533

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

double heikin(int intCount,char *argv[]);

int main(int argc,char *argv[])
{
printf( "%0.3f\n",heikin(argc,argv) );

getchar();
return 0;
}

double heikin(int intCount,char *argv[])
{
double dblTotal=0;
int i;

for(i=1;i<intCount;i++)
{
dblTotal+=atof(argv[i]);
}

return dblTotal/(double)(intCount-1);
}
540452:2007/05/31(木) 22:21:58
別の場所で質問することにします。
有難うございました。
541533です。:2007/05/31(木) 22:25:38
>>539
ありがとうございます!
542デフォルトの名無しさん:2007/05/31(木) 22:30:17
[1] 授業単元: アルゴリズムとデータ構造
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4120.txt
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Boland C++ 、BCC
 [3.3] 言語: C言語
[4] 期限: ([2007年06月7日:10時まで])
[5] その他の制限: 特にないと思います。

教科書のソース
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4120.txt

main関数を作って教科書のソースを自分で動かせるようにしないといけないのですが、
勝手がわからず断念。科目名とか学生名を入れる時点でで既に混乱しております。
よろしくお願いいたします。
543デフォルトの名無しさん:2007/05/31(木) 22:40:48
問題文は?
544デフォルトの名無しさん:2007/05/31(木) 22:44:46
>>516
かなりやっつけ

double my_abs(double x)
{
return (x>=0?x:-x);
}

double my_pow(double x, double y)
{
if(y>0) return x*my_pow(x,y-1);
if(y<0) return (1/x)*my_pow(x,y+1);
else return 1;
}

double fact(double x)
{
if(x<1) return 0;
if(x==1) return 1;
return x*fact(x-1);
}

double sum(double x)
{
double i,y;
y=x;
for(i=y-1;i>0;i--) {
x+=i;
}
return x;
}
545デフォルトの名無しさん:2007/05/31(木) 22:47:29

[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):

標準入力(普通はキーボード) から入力した総文字数(改行を含む) を出力するプログラムを作成せよ.
さらに,リダイレクションを用いて,作成したプログラム自体(test1-1.c) が何文字であるかを確認 せよ.

% ./test1-1 ← キーボードからの入力
input test ← 文字列を入力した後 Enter キーを押す.
12345678 ← 文字列を入力した後 Enter キーを押す.
総文字数は 20 です. ← [Control]+[d] を押したら文字数が表示される.

% ./test1-1 < test1-1.c ←リダイレクションによる入力
総文字数は 256 です.

[3] 環境
 [3.1] OS: Linux3.2
 [3.2] コンパイラ名とバージョン: (gcc 3.4)
 [3.3] 言語: C
[4] 期限: (2007年6月4日)
[5] その他の制限: 繰り返しのfor文 while文あたり
おねがいします
546542:2007/05/31(木) 22:47:39
>543
適当に動くように作れといわれただけで細かいところは自分で決めろ、とのことです。
そういうわけで学生の名前や課目もgakusei:1とかkamoku:1でいいらしいとのことです。

自分の考えといたしましては、
1.scanf関数を用いて、学生名と課目番号と成績を入れる。
2.全学生の課目と成績を表示。
を繰り返すプログラムにしようかと考え中です。
547デフォルトの名無しさん:2007/05/31(木) 23:03:22
>>381
ありがとうございました!
親切に注釈もつけていただいて感謝します。
参考になりました。
548デフォルトの名無しさん:2007/05/31(木) 23:14:46
>>545
#include <stdio.h>
int main(void)
{
    int count = 0;
    while (getchar() != EOF)
        ++count;
    printf("総文字数は %d です.\n", count);
    return 0;
}
549デフォルトの名無しさん:2007/06/01(金) 00:53:29
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク):

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4121.txt
上記プログラムを実行し、i<=count の=が無くても
(つまり i<=count-1番目が異なる)正しい答えを出す入力例に変更しなさい。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:VC++2005
 [3.3] 言語: C++
[4] 期限: 6月1日10時30分まで
[5] その他の制限: なし

どうかお願い致します。
550デフォルトの名無しさん:2007/06/01(金) 01:34:24
>>549
入力例に変更って意味が分からん。
長い方をcountにすればナル文字位置で「異なる」判定になるはず
#include <stdio.h>
void main(void) {
char s1[] = "abcd";
char s2[] = "abcde";
int i = 0;
int j = 0;
int count;
int same;

while (s1[i]) { i++; }
while (s2[j]) { j++; }

count = (i > j) ? i : j;

same = 1;
for(i = 0; i < count; i++) {
if(s1[i] != s2[i]){
printf("%d番目で異なる\n",i);
same = 0;
break;
}
}

if (same) {
printf("同じである\n");
}
}
551デフォルトの名無しさん:2007/06/01(金) 01:39:02
>>549
こういうことじゃね?

char s1[]="abcd";
char s2[]="bbcde";
552デフォルトの名無しさん:2007/06/01(金) 03:15:04
>>546
なんか使う関数って学生名と科目名、保存出来なくねぇ?
どっちも番号だけになってるような。
それとも、add関数を変更するか、
名前と番号を対応付けるところは自分で作るの?
553デフォルトの名無しさん:2007/06/01(金) 03:43:25
>>546
関数の使い方はこんなもんかな。
int main()
{
char line[256];
int gNum, kNum, sValue;
initialize();
while(fgets(line,256,stdin) != NULL){
printf("input ")
if(sscanf(line,"%d %d %d",&gNum,&kNum,&sValue) != 3){
printf("err %s \n",line);
continue;
}
add(gNum, kNum, sValue);
}
for(gNum=0;gNum<MAX_GAKUSEI;gNum++){
for(kNum=0;kNum<MAX_KAMOKU;kNum++){
sValue=get_seiseki(gNum,kNum);
if(sValue!=-1){
printf("%d %d %d\n",gNum,kNum,sValue);
}
}
}
return 0;
}
554デフォルトの名無しさん:2007/06/01(金) 09:26:15
1] 授業単元: C言語
[2] 問題文(含コード&リンク):
100〜150の間の奇数の合計を出力せよ
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:VC++2005
 [3.3] 言語: C
[4] 期限: 6月4日10時00分まで
[5] その他の制限: whileとfor文両方でお願いします

始めたばかりでチンプンカンプンですのでよろしくお願いします^^;
555デフォルトの名無しさん:2007/06/01(金) 09:44:30
>554
for文
#include <stdio.h>
int main(void)
{
int i, sum = 0;
for(i=100; i<=150; i++) if(i%2) sum += i;
printf("%d", sum);
return 0;
}
while文
#include <stdio.h>
int main(void)
{
int i = 100, sum = 0;
while(i<=150) {
if(i%2) sum += i;
i++;
}
printf("%d", sum);
return 0;
}
556デフォルトの名無しさん:2007/06/01(金) 09:49:37
さっそくありです^^
あ〜すいませんただ書き忘れてたんですがoddを
使った場合はどうなるでしょうか?
よければそちらもお願いします。
557デフォルトの名無しさん:2007/06/01(金) 09:53:25
odd ?
C標準関数/文法にそんなのないよー
558デフォルトの名無しさん:2007/06/01(金) 09:55:29
sum を odd に書き換える
559デフォルトの名無しさん:2007/06/01(金) 10:42:54 BE:69876094-2BP(222)
>>554
・for文
#include<stdio.h>
int main(){ int a=101; int d=2; int n=25; int s= n*(2*a+(n-1)*d)/2; for(;;)printf("%i\n", s); return 0; }

・while文
#include<stdio.h>
int main(){ int a=101; int d=2; int n=25; int s= n*(2*a+(n-1)*d)/2; while(1)printf("%i\n", s); return 0; }
560デフォルトの名無しさん:2007/06/01(金) 11:09:47
ありがとう!
561デフォルトの名無しさん :2007/06/01(金) 11:45:49
#include <stdio.h>

int main()
{
int a = 100, sum = 0;

for(;;){
if(a >= 150)
break;
if(a%2)
sum += a;
a++;
}
printf("%d \n", sum);

a = 100, sum = 0;

while(1){
if(a >= 150)
break;
if(a%2)
sum += a;
a++;
}
printf("%d \n", sum);
return 0;
}
562デフォルトの名無しさん:2007/06/01(金) 11:55:39 BE:15528342-2BP(222)
等差数列の和をループで計算する奴って中学校出てないんだろうか?
563デフォルトの名無しさん:2007/06/01(金) 11:59:28
>>562
題意としては、ループさせたいんだろうけど、元素材が悪いw
564デフォルトの名無しさん:2007/06/01(金) 12:24:22
>>562
そういう勝手なことを言っておきながら、お前が昨日書いたクソースは
初項1、等差1に対応していた奴だったじゃんwwwwww
〜じゃなきゃだめだって言うのは、おまえ自身の勝手な主観だから、黙っとけ、年金未納おっさんw
565デフォルトの名無しさん:2007/06/01(金) 12:24:24
ガウスの計算って小学校じゃなかったか?
566デフォルトの名無しさん:2007/06/01(金) 12:28:22
458 名前:デフォルトの名無しさん 投稿日:2007/05/31(木) 12:57:43 ?2BP(222)
>>447
#include<stdio.h>
#include<stdlib.h>
int main(){char tmp[256];int s,n=0;while(n>0){printf("整数の入力:");fgets(tmp,256,stdin);
n=atoi(tmp); s=n*(n+1)/2;printf("合計:%i\n", s);} return 0;}
567デフォルトの名無しさん:2007/06/01(金) 12:33:05
↓一応先に言っておくけど、問題ありとは書いてないっすからねw
568デフォルトの名無しさん:2007/06/01(金) 13:33:27
問題あり
569デフォルトの名無しさん:2007/06/01(金) 13:47:05
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):預金額、利率を入力して、10年間分の各利率に対する預金額を表示する。
[3] 環境
 [3.1] OS: WindowsVista
 [3.2] コンパイラ名とバージョン: VC++2005
 [3.3] 言語: C++
[4] 期限: 6月8日まで
[5] その他の制限: 特になし

よろしくお願いいたします。
570デフォルトの名無しさん:2007/06/01(金) 13:53:52 BE:77640858-2BP(222)
>>564
ジャパン語で。
571デフォルトの名無しさん:2007/06/01(金) 13:56:12 BE:46584364-2BP(222)
>>569
複利なのか単利なのかくらい書け。
572デフォルトの名無しさん:2007/06/01(金) 13:59:48
単利だと思います。
573デフォルトの名無しさん:2007/06/01(金) 14:05:40
>>569 金利計算ってこれであってるんやろか?
#include<stdio.h>
int main(void){
    long yokin, tanri, fukuri;
    double riritu;
    int i;

    printf("預金額 : ");
    scanf("%ld", &yokin);
    printf("年利率 : ");
    scanf("%lf", &riritu);

    tanri=fukuri=yokin;
    for(i=0;i<10;i++)
    {
        tanri+=yokin*riritu/100.0;
        fukuri=fukuri*(1+riritu/100.0);
        printf("%2d 年目 単利 %ld 円 複利 %ld円\n", i+1, tanri, fukuri);
    }

    return 0;
}
574デフォルトの名無しさん:2007/06/01(金) 14:08:02
>>570
日本語も読めない在日がこんなところでのうのうと日本語を書くなよw
575デフォルトの名無しさん:2007/06/01(金) 14:09:59
最近さぁ、自分の都合の悪い意見には日本語でおkとか言う奴が増えてきているけど
そういうことを言っているお前が、日本語が理解できない、物事も的確に判断、理解できない
バカなんじゃないか?って思われていることに気づいた方が良いよw
とりあえず、トーマスは確実に基地外でバカ。自分より劣る人間を探して罵倒することで
自分を誇示したがる井の中の蛙なんだよねw
576デフォルトの名無しさん:2007/06/01(金) 14:10:03
1円以下の取り扱いは? (切り捨て/切り上げ/四捨五入)
利率更新のタイミングは? (日/月/年)
-----
これを改変した詐欺あったよなー
577デフォルトの名無しさん:2007/06/01(金) 14:13:51
等差数列の和を初項1、等差1の固有のものを使っちゃうやつってゆとり世代?w
578デフォルトの名無しさん:2007/06/01(金) 14:14:15 BE:54348274-2BP(222)
>>569>>572
#include<stdio.h>
#include<stdlib.h>
int main(void){double rate;int i,principal;char tmp[256];printf("元金:");
fgets(tmp,256,stdin);principal=atoi(tmp);printf("利率(%%):");fgets(tmp,256,stdin);
rate=atof(tmp)/100.0;for(i=1;i<11;i++){printf("%i年後:%i円\n",i,principal+
(int)(rate*i*principal));}return 0;}
579デフォルトの名無しさん:2007/06/01(金) 14:18:07 BE:108696487-2BP(222)
>>577
初項1、等差1の等差数列の和を求めるのに「初項1、等差1の等差数列の和の公式」を
使うのは当然。
何でもかんでも一般化しないときが済まないのかねw
580デフォルトの名無しさん:2007/06/01(金) 14:21:16 BE:122283397-2BP(222)
n*(2*a+(n-1)*d)/2のaとdが1だと分かっているならCPUに*1なんて計算させるのは
無駄なので事前に計算して式を単純化するなんてのはチューニングの基礎なん
だけどね。
なぜそこに噛みつくのかが全く分からない。宇宙から司令電波でも受信してるのかねw
581デフォルトの名無しさん:2007/06/01(金) 14:23:28
>>387
できないです…
課題1はif文でお願いします。言い忘れててすいませんでした(>_<)
課題2は配列のかけ算ではなく4行4列の行列のかけ算です(>_<)
582デフォルトの名無しさん:2007/06/01(金) 14:24:17
日本語の通じないトーマスには「問題あり」が何か日本語じゃない文字として浮かび上がって見えるそうだ
583デフォルトの名無しさん:2007/06/01(金) 14:34:53
すいません(>_<)>>387課題1はできました。2をお願いしますm(_ _)m
584デフォルトの名無しさん:2007/06/01(金) 14:44:01
>>583
#include<stdio.h>
int main(void){
    int x[4][4]={{260,45,-16,5},{-79,36,-2,-7},{0,-16,3,-2},{-8,-4,5,-4}};
    int z[4][4]={{16,12,32,100},{12,32,100,100},{32,100,100,100},{100,100,100,100}};
    int y[4][4];
    int i, row, column;

    for(column=0;column<4;column++){
        for(row=0;row<4;row++){
            y[column][row]=0;
            for(i=0;i<4;i++) y[column][row]+=x[column][i]*z[i][row];
        }
    }

    for(column=0;column<4;column++){
        for(row=0;row<4;row++) printf(" %5d", y[column][row]);
        printf("\n");
    }

    return 0;
}
585デフォルトの名無しさん:2007/06/01(金) 15:10:03
[1] 授業単元:年金問題
[2] 問題文(含コード&リンク):浮いた5000万件の所在がわかるようにするプログラム
[3] 環境
 [3.1] OS: 厚生省
 [3.2] コンパイラ名とバージョン: 社会保険庁 Ver.2.007
 [3.3] 言語: ジャパン語
[4] 期限: 参議院選挙の投票日の一週間前
[5] その他の制限: 支払いをした領収書がなくてもわかるようにお願いします。
586デフォルトの名無しさん:2007/06/01(金) 15:12:13
>>585
#include<stdio.h>
int main(void){
    int i;
    for(i=0;i<50000000;i++) printf("俺\n");
    return 0;
}
587デフォルトの名無しさん:2007/06/01(金) 15:29:12
>>585
error:多すぎて不可能です。
warnning:このままでは日本が崩壊する可能性があります。解決するには、全ての議員を辞めさせて選挙をする必要があります。
588デフォルトの名無しさん:2007/06/01(金) 15:38:40 BE:38820645-2BP(222)
そもそも複数の年金番号を持ってるのに申請しなかった方が悪いんだがな。
589デフォルトの名無しさん:2007/06/01(金) 15:40:23
>>586
>  [3.3] 言語: ジャパン語
ジャパン語で
590デフォルトの名無しさん:2007/06/01(金) 15:41:54
管理もしてないのにどうして請求だけが出来るのか不思議
591デフォルトの名無しさん:2007/06/01(金) 15:44:39 BE:27174072-2BP(222)
実際、「5000万件」と「5000万人」の違いが理解できない奴がパニックになってるだけで。
592デフォルトの名無しさん:2007/06/01(金) 15:53:22
あ〜〜あ、俺の釣りネタの入った釣堀に人が集まっちゃったかw
593デフォルトの名無しさん:2007/06/01(金) 16:08:08
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):下にあります。
[3] 環境
 [3.1] OS:Linux
[4] 期限:できるだけ早いと嬉しいです


一行からなる二つの文字列を入力し,それぞれを一旦char型の配列に記録する.二つの文字列が等しければ"yes"をさもなければ"no"を表示するプログラムを作成しなさい.

このとき,二つの文字列に対応する2つの文字列(文字配列)の先頭番地を与えたとき,二つの文字列が一致していれば1を,一致していなければ0を返す関数int mycmp(char *, char *);を定義し,これを有効に使うこと.

プログラミングにあたっては,配列宣言を除き,すべてポインタを用いて処理すること.文字列は256文字以下が入力されるものとし,文字列の長さに関するエラー処理をする必要はない.
594デフォルトの名無しさん:2007/06/01(金) 16:13:22
#include <stdio.h>
#include <string.h>

int mycmp(char * s1, char * s2)
{
return strcmp(s1, s2) == 0);
}
int main()
{
char str1[257];
fgets(str1, sizeof(str1), stdin);
char str2[sizeof(str1)];
fgets(str2, sizeof(str2), stdin);
printf("%s\n", mycmp(str1, str2) ? "yes" : "no");
return 0;
}
595594:2007/06/01(金) 16:14:34
やべぇ、ポインタの使いどころがなかった。
596594:2007/06/01(金) 16:15:49
「できるだけ早いと」且つ他の制限がないのでstrcmp()を使用した。
今更使うなと言われても知らないw
597デフォルトの名無しさん:2007/06/01(金) 16:17:56
ポインタを用いたのを教えてくれると嬉しいんですが・・・
598デフォルトの名無しさん:2007/06/01(金) 16:20:31
int mycmp(char *a, char *b)
{
do {if(*a!=*b++) return 0;}while(*a++);
return 1;
}
599デフォルトの名無しさん:2007/06/01(金) 16:20:48
mycmpのs1とs2はポインタ
600デフォルトの名無しさん:2007/06/01(金) 16:30:47 BE:17469533-2BP(222)
>>593
#include<stdio.h>
#include<string.h>
int mycmp(char* s1,char* s2){return strncmp(s1,s2,256)==0;}
int main(void){char s1[256],s2[256];fgets(s1,256,stdin);fgets(s2,256,stdin);
puts(mycmp(s1,s2)?"yes.":"no.");return 0;}
601デフォルトの名無しさん:2007/06/01(金) 16:32:41
>>600
亀乙。
602デフォルトの名無しさん:2007/06/01(金) 16:37:06
>>600
おせーーんだよ、弱小企業めがw
603デフォルトの名無しさん:2007/06/01(金) 16:39:23
>>601-602 どうしたんだ?
外へ出て深呼吸したほうがいいぞ
604デフォルトの名無しさん:2007/06/01(金) 16:40:03
なぜ、いつも?2BP(222)が叩かれるのか教えてください。
605デフォルトの名無しさん:2007/06/01(金) 16:41:25 BE:93168386-2BP(222)
叩くバカが一匹いるから。
606デフォルトの名無しさん:2007/06/01(金) 16:42:20 BE:54348274-2BP(222)
>>601-602
だってー、>>594はコンパイル通らないんですもの。
607デフォルトの名無しさん:2007/06/01(金) 16:42:27
トーマスが本当にバカだから
608デフォルトの名無しさん:2007/06/01(金) 16:43:53
562 名前:デフォルトの名無しさん 投稿日:2007/06/01(金) 11:55:39 ?2BP(222)
等差数列の和をループで計算する奴って中学校出てないんだろうか?
609デフォルトの名無しさん:2007/06/01(金) 16:46:13
そもそも忙しい会社なら、こんなクソスレで質問する奴を相手にしないと思うんだが
よっぽど暇で儲けがないから、自分より劣る奴を罵倒しに来ている暇人なんだよ
トーマスって奴はw
610デフォルトの名無しさん:2007/06/01(金) 16:46:32
中学じゃなくて小学校レベルじゃねぇか
611デフォルトの名無しさん:2007/06/01(金) 16:47:58
あ、括弧閉じが一個余計だ。
612デフォルトの名無しさん:2007/06/01(金) 16:49:27
そして言い訳をして自分を煽ってくる相手に対して強がろうと必死になる
トーマス哀れwwwwwww こんなところじゃお前がこき使おうと思って
雇おうと思える社員すらみつからんぞw
613デフォルトの名無しさん:2007/06/01(金) 16:49:27
>>609 自己紹介乙
614デフォルトの名無しさん:2007/06/01(金) 16:50:17
>>613
お前さぁ、自分を擁護する奴がいるように見せかけようと自作自演しなくて良いからw
バレてんだよ、お前を擁護する奴なんていないんだからw
615デフォルトの名無しさん:2007/06/01(金) 16:53:05
>>613 自己紹介?悪いけど大学院生だから、俺。会社になんてまだ勤めてないし
トーマスみたいな基地外が運営している会社になんて入りたくねーよw
616デフォルトの名無しさん:2007/06/01(金) 17:00:27
>>615 は多分、同窓生の中では成績が優秀なんだろうな。
617デフォルトの名無しさん:2007/06/01(金) 17:01:56 BE:77640858-2BP(222)
自分に同意しない奴がみんな自演に見えるようになったら入院が必要なレベル。
618デフォルトの名無しさん:2007/06/01(金) 17:06:16
すでに入院済み
619デフォルトの名無しさん:2007/06/01(金) 17:08:11
自分を擁護する養護学校卒のトーマスたん可愛いよwwwww
相手にバカとか罵倒すりゃムキになると思っているんだろうけど、無駄w
お前がバカだというのが分かっているから。このスレで過去にお前が出した
クソースをみりゃ一目瞭然w
620デフォルトの名無しさん:2007/06/01(金) 17:10:41
自分を自作自演で擁護しているトーマスたんは養護学校を運営しているそうでつ
621デフォルトの名無しさん:2007/06/01(金) 17:11:45
妙な怨みを買ったトーマス氏も大変だな。

>>617
おまえもそうじゃね?>>605とか。
622デフォルトの名無しさん:2007/06/01(金) 17:12:52 BE:93168768-2BP(222)
昨日も聞いたけどクソースって何語よ?
なんか勝手に略語とか造語とか作って悦に入ってる中学生みたいな奴いるけど、
意味も定義しないで変な言葉作る奴って例外なく無能なんよねぇ。

んで、バカにバカというのは罵倒でも何でもなくて、単に事実を指摘してるだけ。
もちろん事実と認めるに足る具体的な根拠付きでね。
623デフォルトの名無しさん:2007/06/01(金) 17:13:23
>>603なんてモロにトーマスの発言だと分かる書き方だよなw
624デフォルトの名無しさん:2007/06/01(金) 17:14:45
まて >>603 は違う
オレは断じてトーマスなんかではないぞ
625デフォルトの名無しさん:2007/06/01(金) 17:15:19 BE:23292926-2BP(222)
>>621
>おまえもそうじゃね?>>605とか。

ゼロではないという意味。
626デフォルトの名無しさん:2007/06/01(金) 17:15:50
きかんしゃトーマスってあるけど、痴漢者トーマスってタイトルで
女性専用車両で痴漢するトーマスを想像しちゃったり
627デフォルトの名無しさん:2007/06/01(金) 17:16:38
>>624
ほぉ、その慌てっぷり、自作自演もここまで白々しく他人を装ってやると
面白くなってくるねw
628デフォルトの名無しさん:2007/06/01(金) 17:19:06 BE:15528724-2BP(222)
>>626
「痴漢者トーマス」というエロゲーがある。パート2まで出たらしい。
池袋には「痴漢車トーマス」というイメクラがあった。今はない。
629デフォルトの名無しさん:2007/06/01(金) 18:37:14
どなたか>>511お願いします(´・ω・`)
630デフォルトの名無しさん:2007/06/01(金) 18:58:41
>>629
int move(int i, int j)
{
map[i][j] = 2;

/* reached the goal */
if (i == 0 && j == 1)
{
map[i][j] = 3;
return TRUE;
}

/* north */
if (i > 0 && !map[i-1][j] && move(i-1, j) == TRUE)
{
map[i][j] = 3;
return TRUE;
}

/* south */
if (i < 8 && !map[i+1][j-1] && move(i+1, j) == TRUE)
{
map[i][j] = 3;
return TRUE;
}
631デフォルトの名無しさん:2007/06/01(金) 18:59:37

/* east */
if (j < 21 && !map[i][j+1] && move(i, j+1) == TRUE)
{
map[i][j] = 3;
return TRUE;
}

/* west */
if (j > 0 && !map[i][j-1] && move(i, j-1) == TRUE)
{
map[i][j] = 3;
return TRUE;
}

/* cannot reach the goal */
return FALSE;
}

説明に書かれてるとおりの実装。スタックがどうとかってのはおそらく再帰展開しろって事だろうが面倒だからパス
632デフォルトの名無しさん:2007/06/01(金) 19:03:30
>>631
return FALSE;
の前に
map[i][j] = 0;
が必要じゃね?
633デフォルトの名無しさん:2007/06/01(金) 19:06:40
>>632
言われてみればそうだな
まぁ勝手に追加してくれ
634デフォルトの名無しさん ◆BBXgAYJ6W6 :2007/06/01(金) 21:33:47
5日間、考えてもできません。
頭が痛くて倒れそう・・・。助けてください、お願いします。

[1] 授業単元: C言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4122.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] VC 6.0
 [3.3] 言語:C言語
[4] 期限:     2007年6月4日(月)午前
                (なので、前日の6月3日(日)までにしていただければありがたいです)

[5] レベルとか:  C言語1ヶ月目位。教科書は「独習C」一通り読んだだけ。
         もし、作っていただけるのなら、あまり高度な技術で作っていただいても、
出来が良すぎると怪しまれるので・・・、
少しプログラムの水準を低く(?)していただけるとありがたいです。
         変なお願いしてすいません。お願いします。
635516:2007/06/01(金) 22:08:47
>>544
返信遅くなってすいません!ありがとうございましたー
636デフォルトの名無しさん:2007/06/01(金) 22:29:05
わかりません。助けて下さい
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク) じゃんけんゲームを作成せよ.ただし,main() は下記のものを用いよ
 具体的には,get hand player(), print hand(),judge() を追加すればよい
 じゃんけんぽん(1-3): 1
 コンピュータ:グー
  あなた:グー
 あいこ
int main(){
int computer, player;
srandom((unsigned long)time(NULL));
while(1) { computer = random() %3+1; /*コンピュータの手(1〜3,乱数)*/
player = get_hand_player(); /* 人間の手(1〜3) */
 printf("コンピューター:");
  print_hand(computer); /* 手(グー,チョキ,パー) の表示 */
  printf("あなた:");
  print_hand(player); /* 手(グー,チョキ,パー) の表示 */
  switch(judge(computer, player)) { /* 勝負判定(-1〜1) */
   case -1:   printf("私の勝ち!\n"); break;
  case 0:  printf("あいこ\n");  break;
   case 1:   printf("あなたの勝ち!\n");}  } 
}
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4)
 [3.3] 言語: C 言語
[4] 期限: (2007年6月5日)
[5] その他の制限:ポインタはまだ習ってません お願いします
637デフォルトの名無しさん:2007/06/01(金) 22:33:26
>>584さん、ありがとうございます。
638デフォルトの名無しさん:2007/06/01(金) 22:41:50
前スレ711です。(問題再掲:二次関数(y = a x^2+ bx +c)でxがx1 <= x <= x2のときの最大値と最小値(そのときのxの値も含めて)を求めるプログラムを作成せよ。ここでa,b,cは整数、x1,x2は浮動小数とする。 )
前スレで回答してもらった下のプラグラムを実行すると、x1、x2をこちらから指定することができなくなってしまいます。どこを手直しすれば良いのか教えてください。おねがいします。
#include<stdio.h>
double f_internal(int a, int b, int c, double x, int is_init){
static int sa, sb, sc; // a, b, c を外部変数にするべきかな?
if(is_init){sa=a;sb=b;sc=c;}
return sa*x*x+sb*x+sc;
}
void f_init(int a, int b, int c){f_internal(a, b, c, 0, 1);}
double f(double x){return f_internal(0, 0, 0, x, 0);}
int main(void){
int a, b, c;
double x1, x2, xx, xmin, xmax, ymin, ymax;
printf("\nInput value of a, b, c : ");
scanf("%d %d %d", &a, &b, &c);
printf("\nInput value of x1, x2 : ");
scanf("%lf %lf", &x1, &x2);
if(x1>x2){xx=x1;x1=x2;x2=xx;}
f_init(a, b, c);
xx=(a!=0)?(double)-b/(2*a):x1; // y'=2*a*x+b -> x=-b/(2*a) の時,極値をとる
if(xx<x1) xx=x1;
if(xx>x2) xx=x2;
xmax=xmin=x1;
ymax=ymin=f(x1);
if(ymax<f(xx)){ymax=f(xx);xmax=xx;}
if(ymin>f(xx)){ymin=f(xx);xmin=xx;}
if(ymax<f(x2)){ymax=f(x2);xmax=x2;}
if(ymin>f(x2)){ymin=f(x2);xmin=x2;}
printf("maximum : x=%g y=%g\n", xmax, ymax);
printf("minimum : x=%g y=%g\n", xmin, ymin);
return 0;
}
639デフォルトの名無しさん:2007/06/01(金) 23:52:32
>>634
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4123.cpp

「少しプログラムの水準を低く」との事だったので、ふざけるなゴルァと言われるソースを書いてみたw
でも、現実はお金もらってるのにこのようなソースを書くやつが多かったりするww

正常に動作するかは>>634自身でやってくれ。
640639:2007/06/01(金) 23:55:52
それと、「ファイル編」は自分で考えてくれ。
main関数を変更するだけでできるはず。
641542:2007/06/02(土) 00:01:24
>>553
ありがとうございます!
返信が遅くなってしまいましたが、
こちらでもコンパイルが無事完了いたしました!

まだ良く理解出来てない部分なので
ソースを見ながら一行ずつ解読していこうと思います。

本当にありがとうございます。
642デフォルトの名無しさん:2007/06/02(土) 00:09:12
[1] 授業単元:C言語
[2] 問題文(含コード&リンク): 下に書いてあります。
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:どちらでも可
[4] 期限:早いと有り難いです。

入力した関数を微分・積分して結果を表示するプログラムを作成せよ。
643デフォルトの名無しさん ◆BBXgAYJ6W6 :2007/06/02(土) 00:17:01
>>639
助かりました。
ふざけるなゴルァのソースすら考えられない自分に鬱orz
ファイル編は教科書見ながらします。
本当にありがとうございました。
644デフォルトの名無しさん:2007/06/02(土) 00:25:00
逆にスイッチでよう頑張るなと感心してしまう
645デフォルトの名無しさん:2007/06/02(土) 00:30:57
466〜468お願いします<(_ _)>
646デフォルトの名無しさん:2007/06/02(土) 00:40:42
>>642
何?数値微分とか数値積分の話じゃないよね?
こんな感じのプログラムかな?
関数を入力して下さい:x^3
d(x^3)/dx=3*x^2 ,∫x^3dx=x^4/4+C
647デフォルトの名無しさん:2007/06/02(土) 00:51:55
>>638
エスパー回答
Input value of a, b, c : 1,2,3
のようにカンマ区切りで数値を入力してるんじゃないかと推測

Input value of a, b, c : 1 2 3
Input value of x1, x2 : -2.5 3.0
のようにスペース区切りで数値を入力すればおk
648デフォルトの名無しさん:2007/06/02(土) 01:16:20
>>636
int get_hand_player(void){
    int player;
    do{
        printf("じゃんけんぽん(1-3): ");
        scanf("%d", &player);
    }while(player<1 || 3<player);
    return player;
}
void print_hand(int hand){
    char *hand_str[]={"dummy", "グー", "チョキ", "パー"};
    puts(hand_str[hand]);
}
int judge(int computer, int player){
    switch((computer-player+3)%3){
        case 0: return 0; break;
        case 1: return 1; break;
    }
    return -1;
}
649デフォルトの名無しさん:2007/06/02(土) 01:22:12
>>636 ポインタ無しに修正
void print_hand(int hand){
    if(hand==1) puts("グー");
    if(hand==2) puts("チョキ");
    if(hand==3) puts("パー");
}
650642:2007/06/02(土) 01:35:34
>>646
まさにそんな感じです。
651デフォルトの名無しさん:2007/06/02(土) 03:03:26
>>650
情報関係の学科ですか?まあ何所でも良いんだけど
情報足り無すぎて作れない。対応する関数、入出力の形式、仕様は自由
とか、他に何か言われて無い?言われた事を全部言って貰わないと困る。
仕様が自由なら、a*x^n見たいな簡単な関数だけに対応して
入出力も0.5*x^-0.5とか適当に済ませちゃうんだけどな。
652642:2007/06/02(土) 03:17:51
>>651
情報関係ではないです。
実際指示はそれだけでした。
プログラミング自体が専門外の学科なんで、あまり難しいことは求められてないと思います。
なので関数も簡単なやつのみに対応するもので構わないので、お願いします。
653636:2007/06/02(土) 09:49:41
>>648>>649ありがとうございます!
654デフォルトの名無しさん:2007/06/02(土) 11:30:23
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4126.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: 6.0
 [3.3] 言語: C言語
[4] 期限: 6月4日
[5] その他の制限: 教科書は明解C言語を使ってます
 まだc言語を習い始めて2ヶ月です
 誰か解いてください おねがいします
655デフォルトの名無しさん:2007/06/02(土) 12:18:15
>654
1)
#include <stdio.h>
int main(void)
{
int i, n;
printf("整数値を入力してください:");
scanf("%d", &n);
for(i=1; i<=n; i++) printf("%d", i%10);
return 0;
}
656デフォルトの名無しさん:2007/06/02(土) 12:19:52
2)
#include <stdio.h>
char *a[] = {"0","1","2","3","4","5","6","7","8","9"};
void show(int n)
{
if(n<10) printf("  %s", a[n]);
else printf(" %s%s", a[n/10], a[n%10]);
}
int main(void)
{
int i, j;
printf(" |");
for(i=1; i<=9; i++) show(i);
printf("\n------------------------------------------------\n");
for(i=1; i<=9; i++) {
printf("%s|", a[i]);
for(j=1; j<=9; j++) show(i*j);
putchar('\n');
}
return 0;
}
657デフォルトの名無しさん:2007/06/02(土) 12:49:37
>>655
>>656
ありがとうございました!
658デフォルトの名無しさん:2007/06/02(土) 13:13:51
[1] 授業単元: C言語
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4127.txt
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語: C言語
[4] 期限: 6月3日
よろしくおねがいします
659デフォルトの名無しさん:2007/06/02(土) 13:16:37
>>658
横長になるような入力を行う。

冗談は置いといて、入力された後にwidthとheight見て
大きいほうを横にしてしまえばいいんでねぇの?
660デフォルトの名無しさん:2007/06/02(土) 13:28:27
>>658
#include <stdio.h>

int main(void)
{
int i, j;
int LongLength, ShortLength;
int temp;

puts("長方形を作りましょう。");
printf("一辺(その1):"); scanf("%d", &LongLength);
printf("一辺(その2):"); scanf("%d", &ShortLength);

if(ShortLength > LongLength)
{
temp = ShortLength;
ShortLength = LongLength;
LongLength = temp;
}

for(i = 0; i < ShortLength; i++)
{
for(j = 0; j < LongLength; j++) putchar('*');
putchar('\n');
}
return 0;
}
661デフォルトの名無しさん:2007/06/02(土) 14:13:46
>>659
学校の先生がウザイから実行例どうりにならなきゃ
ダメなんですよ
>>660
ありがとうございます
662デフォルトの名無しさん:2007/06/02(土) 14:20:35
口が裂けても目上の人間のことをそんな風に言うな。
マの世界ってのは軍隊式だと覚えておいた方が良い。
663デフォルトの名無しさん:2007/06/02(土) 14:41:53
くーーっくっくっくー、トーマスみたいなヘボでもこういう場所では
でけぇ面するくらいだしな、クーーックックックー
664デフォルトの名無しさん:2007/06/02(土) 15:21:03
土日はトーマスたんはお休みでつか?どうせエロゲーのメーカーの社員だろ?
665デフォルトの名無しさん:2007/06/02(土) 15:50:13
ここで依頼してる奴がみんなプログラマ志望な訳じゃないだろ。
666デフォルトの名無しさん:2007/06/02(土) 16:50:01
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
自分の姓名を以下の2通りの方法で表示するプログラムを書け。まず配列aを姓名を使って初期化する。
・aの各要素a[i]を1文字ずつ出力する
・ポインタPを使って、同様に1文字ずつ出力する
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: C
[4] 期限: 6月4日
[5] その他の制限: 配列、文字列、ポインタ、構造体など習いました。
これらを使って出来ませんでしょうか?お願いします
667デフォルトの名無しさん:2007/06/02(土) 16:55:15
>>666
#include <stdio.h>

int main(void)
{
char a[] = "Input Your Name";
char *p = a;
int i = 0;
/* Method 1 */
while(a[i]) putchar(a[i++]);
/* Method 2 */
while(*p) putchar(*(p++));
return 0;
}
668デフォルトの名無しさん:2007/06/02(土) 18:07:32
669デフォルトの名無しさん:2007/06/02(土) 19:36:00
>>667ありがとうございました!
670デフォルトの名無しさん:2007/06/02(土) 21:27:05
エロゲメーカーの社員に微妙にあこがれる
671デフォルトの名無しさん:2007/06/02(土) 22:37:45
>>642
取り合えずそれらしい物は出来た。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4132.c


672デフォルトの名無しさん:2007/06/02(土) 22:46:30
>670
童貞お断りのメーカーもあるらしいw
673642:2007/06/03(日) 00:10:16
>>671
さっきやってみたら成功しました!
どうもありがとうございます、お手数かけました。
674デフォルトの名無しさん:2007/06/03(日) 00:19:05
[1] 授業単元:ネットワークプログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4133.c
$./[プログラム] [-s or -c]でサーバ・クライアントとして動作
-s,-cの順にプログラムを重複起動させて通信を行う.

-s(サーバ)では・・・
echoサーバのように,受信した文字列をクライアントにそのまま返信する.
(サーバ側では受信した文字を表示してもしなくてもよい)
入力した文字列をクライアントに送信する.
同時に複数のクライアントから接続があった場合,後からの方に文字列busyを送り,コネクションを切断する.○
-s動作中に$telnet 127.0.0.1 10007で接続可能 ○

-c(クライアント)では・・・
入力された文字列をサーバに送信する.
サーバから送られてきた文字列を表示する.
キーボードからの入力が終了したとき(改行のみのとき)に,コネクションを切断し終了する.○
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 6月5日 9:00
[5] その他の制限: リンク先の書きかけのソースを参考にお願いします.○はなんとかそれらしく動作している項目です.改善した方がいい所があれば書き換えてもらえれば結構です.
675デフォルトの名無しさん:2007/06/03(日) 00:44:37
ソケットとかはわからんので、ソース見てて思ったことでも・・・

goto多いね
ラベルは関数が違うなら違う名前のほうがいいかと。
他人に見てもらうならコメントもう少しあったほうがいいかと。
676デフォルトの名無しさん:2007/06/03(日) 01:08:33
gotoは、そんなにひどい使い方でもないから問題ないと思うな。
ループ内のコードが長くなる場合は、goto loop: もありかもな、
whileやforをつかうよりわかり易いかも知れないとおもった。
677デフォルトの名無しさん:2007/06/03(日) 02:05:14
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4135.txt
[3] 環境
 [3.1] OS: (Windows/Linux/等々) Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6月4日 9:00
[5] その他の制限: 特になし

やってもやっても上手くいきません…
よろしくお願いします
678デフォルトの名無しさん:2007/06/03(日) 03:21:37
>>677
いまいち仕様が分かりませぬ
679デフォルトの名無しさん:2007/06/03(日) 03:25:41
>>677
配列+Linkedリストの極普通なハッシュリストを作れって事なんだろうが
設計の際に図を書けって書いときながら穴埋め形式なのか?
今一出題意図が分からんな・・・
680デフォルトの名無しさん:2007/06/03(日) 03:44:29
>>677 適当でありますが
int cancel(char *id1){
    int x, item, info1;
    struct item *previous, *key;
    x = hash(id1);
    key = table[x];
    previous = table[x];
    item = search(id1);
    if(item > 1){
        printf("Input info\n");
        scanf("%d", &info1);
        if(key->info == info1){
            table[x] = key->next;
        }else{
            key = key->next;
            for(key = key->next; key != 0; key = key->next, previous = previous->next)
                if(key->info = info1){
                    previous->next = key->next;
                    break;
                }
        }
        free(key);
    }else if(item == 1){
        table[x] = 0;
        free(key);
    }
    return item;
}

さて、エロゲメーカーに就職するために、エロゲでもやるか。
681680:2007/06/03(日) 03:45:33
>>680
for文の前の
key = key->next
は無かったことに
682680:2007/06/03(日) 03:51:32
>>677 だめだ……やっぱ、ニートで
int cancel(char *id1){
    int x, item, info1;
    struct item *previous, *key;
    x = hash(id1);
    key = table[x];
    previous = table[x];
    item = search(id1);
    if(item > 1){
        printf("Input info\n");
        scanf("%d", &info1);
        if(key->info == info1){
            table[x] = key->next;
            free(key);
        }else{
            for(key = key->next; key != 0; key = key->next, previous = previous->next)
                if(key->info == info1){
                    previous->next = key->next;
                    free(key);
                    break;
                }
        }
    }else if(item == 1){
        table[x] = 0;
        free(key);
    }
    return item;
}
683680:2007/06/03(日) 03:57:00
コペルニクスとハイゼンベルクがやばいな。
684デフォルトの名無しさん :2007/06/03(日) 10:12:28
>>677のソースのイニシャライズ構文が俺にはわかりません
struct item *table[M];
void initialize()
{
int i;
for (i = 0; i < M; i++)
table[i] = 0;
}
*table[M]ってstruct item 型のポインタのM個の配列ですよね
このイニシャライズ構文だと
table[0] = 0 → table[0] = NULL;
table[1] = 1 → table[1] = 0x1番地
ってな感じになると思うんですけどこれって何の意味があるんですか?
解こうと思ったんすけど、typedefしてないから長ったらしいし
*table[M]もグローバルにする必要性もわかんないしやめました
上記の質問誰か答えて頂けないでしょうか。
685デフォルトの名無しさん:2007/06/03(日) 10:16:39
>>684
>table[0] = 0 → table[0] = NULL;
>table[1] = 1 → table[1] = 0x1番地
どう見ても全てのテーブルを0初期化なんだが?

>for (i = 0; i < M; i++)
> table[i] = 0;

別に、↓でもいいんでね?
memset(table, 0, sizeof(struct item *)*M)
686デフォルトの名無しさん :2007/06/03(日) 10:22:14
>>685
すいやせん
馬鹿な思いこみしてやした
>for (i = 0; i < M; i++)
>table[i] = 0;
を脳が勝手に
for (i = 0; i < M; i++)
table[i] = i;
と捉えてしまいましたでごんす。
687あい:2007/06/03(日) 10:28:16
例題1で用いた配列 atai とその100個の初期値が、ある試験の100人分の点数だったとする。試験の合格点は65点以上で、40点未満は追試がおこなわれる。このデータを集計するためのに以下のようなプログラムを作成せよ。

(1)全員の平均点を求める
(2)合格者の人数を求める
(3)合格者の平均点を求める
(4)追試者の人数を求める
(5)追試者の平均点を求める

Z:\pro1>ex06_3.exe
全員の平均点は、68.6点です。
合格者は64名、平均点は79.8点です。←実行結果
追試者は 9名、平均点は31.9点です。

これがataiです。
atai[100] = { 37, 65, 74, 61, 51, 90, 89,78, 68, 69, 74,
74, 69, 44, 70, 78, 75, 70, 50, 25, 30, 72, 79, 67, 98, 98, 75,
79, 68, 45, 70, 66, 59, 61, 68, 34, 19, 71, 74, 76, 43, 72, 53, 48, 50, 87, 57, 85, 91, 74, 85, 61, 69, 61, 61, 32, 85, 86, 45, 71, 64, 83, 87, 59, 73, 75, 92, 59, 77, 54, 79, 98, 50, 61, 39, 53, 62, 62, 90, 33, 88, 73, 88, 86, 78, 38, 98, 97,
97, 79, 77, 97, 83, 44, 91, 72, 81, 85, 77, 45 };

 [3.1] OS: (Windows/Linux/等々) Windows XP
 [3.2] コンパイラ名とバージョン: vc
 [3.3] 言語: C
[4] 期限: 今日まで

一次元配列を今習っています。おねがいします。
688デフォルトの名無しさん:2007/06/03(日) 10:40:38
>>677
int cancel(char *id1){
    int x, item, info1;
    struct item *previous, *key;
    x = hash(id1);
    key = table[x];
    previous = table[x];
    item = search(id1);
    if(item > 1){
        printf("Input info\n");
        scanf("%d", &info1);
        if(key->info == info1){
            table[x] = key->next;    free(key);
        }else{
            for(key = key->next; key != 0; key = key->next, previous = previous->next)
                if(key->info == info1 && !strcmp(id1, key->id)){
                    previous->next = key->next;    free(key);    break;
                }
        }
    }else if(item == 1){
        if(!strcmp(id1, key->id)){
            table[x] = key->next;    free(key);
        }else{
            for(key = key->next; key != 0; key = key->next, previous = previous->next)
                if(!strcmp(id1, key->id)){
                    previous->next = key->next;    free(key);    break;
                }
        }
    }
    return item;
}
689デフォルトの名無しさん:2007/06/03(日) 10:48:53
690デフォルトの名無しさん:2007/06/03(日) 10:50:07
691デフォルトの名無しさん:2007/06/03(日) 10:53:23
[1] ファイル処理
[2] キーボードからファイル名を読み込み行数と数字文字の個数を表示するプログラム
[3] ?
 [3.1] Windows
 [3.2] Visual Studio 2005
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 無期限
[5] 特になし

分かる方お願いします。
692デフォルトの名無しさん:2007/06/03(日) 10:54:19
>>691
読み込むファイルの中身の具体的な例を出してもらわんと
693デフォルトの名無しさん:2007/06/03(日) 10:55:33
>>674
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4140.txt

出来るだけ元のソースコードは弄らないようにした。
追加した部分は、下の#ifで囲ってあるのでそのまま提出しないように。
#if 0
/* add by 2ch */
〜〜
#endif


selectはソケットディスクリプタ(sd)だけじゃなくて
ファイルディスクリプタ(fd)も待てるのがミソかな。(語弊あるが)

標準入力と標準出力のfdはそれぞれ0と1。
694デフォルトの名無しさん:2007/06/03(日) 10:58:26
>>692
読み込むのは作成したソースプログラムでお願いします。
ちなみにC言語です。
695あい:2007/06/03(日) 11:06:30
処理の流れも教えてもらえませんか?

696デフォルトの名無しさん:2007/06/03(日) 11:06:56
>>691
#include <stdio.h>
int main(void)
{
FILE *fp;
int ch,ret=1,num=0;
char fname[256];

printf("Input filename > ");
scanf("%s",fname);

if( (fp=fopen(fname,"r")) == NULL) {
printf("%sが開けません\n");
return 1;
}
while( (ch=fgetc(fp)) != EOF ) {
if( ch>='0' && ch<='9') num++;
else if( ch=='\n' ) ret++;
}
printf("行数 : %d / 数字 : %d \n",ret,num);
fclose(fp);
return 0;
}
697デフォルトの名無しさん:2007/06/03(日) 11:09:27
>>691
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4141.c

ごめん、最後の行の出力がかっこ悪くなった。
後で気づいたから、直す気力が出ない。
ファイルの指定周りは自分でやってくれ。
698デフォルトの名無しさん:2007/06/03(日) 11:12:01
>>695
1.全ての点数を順番に見る(for文)
2.全体の平均を出すため、総合計を出す。
3.合格者の点数を出すため、65点以上の人数とその合計を出す。
4.追試者の点数を出すため、40点未満の人数とその合計を出す。
5.全体の合計を人数で割れば全体の平均点
6.合格者の合計を人数で割れば合格者の平均点
7.追試者も6に同じ容量

OK?
699あい:2007/06/03(日) 11:14:00
ありがとうございました。
700デフォルトの名無しさん:2007/06/03(日) 11:14:37
>>696-697
わざわざ有り難うございます。
参考にさせて頂きます。
701デフォルトの名無しさん:2007/06/03(日) 11:15:44
>>674
細かいところでは色々あるが、それはまあいいや。
機能面で出来てないところについてだが。

クライアントは端末入力とサーバからの受信の両方を待たなければならないので、
サーバ同様にI/Oの多重化が必要。
やり方は色々あるが、サーバのほうでselect()を使ってるようだから、
クライアントでもselect()を使うようにしたら。
クライアントは標準入力(fd=0)とソケットの2つを待つようにして、
標準入力からread()→ソケットにwrite()
ソケットからread()→標準出力にwrite()
のようにする。単にコピーするだけのパイプラインが二つあるわけだ。

端末がcookedモード(デフォルトの状態)なら、
特に何も考えなくとも、改行を入力した時点でselect()から戻り、
その時点でread()すれば、(fgets()など使わずとも)ちょうど
1行分だけ読み込める、つまり自然に行入力になっているはずだ。

クライアント側の終了処理は、以下のようにする。
・入力が終わった時にやること
  1) shutdown(第二引数は1を指定)を呼び、送信完了をサーバに伝える。
    (サーバ側ではこれを受けるとread()が0で返る)
  2) 入力が完了したことを覚えておき、標準入力の分をfdsetから抜く。
   サーバからの受信が完了するまではselect()ループからは抜けないように。
・サーバからの受信が終わった時(read()の戻り値<=0)にやること
  ソケットをclose()して、select()ループから抜ける。後始末。
702701:2007/06/03(日) 11:17:22
うわ>>693を見てなかったw
703デフォルトの名無しさん:2007/06/03(日) 11:18:01
>>700
ん、>696と>697は仕様が違うな。
あんな、要求じゃこれくらいの差は出てしまうか。
実行して出力すりゃわかると思うけど、自分のやりたいほうを確認してから提出しろよ。
704デフォルトの名無しさん :2007/06/03(日) 11:19:09
#include <stdio.h>

int main()
{
FILE *fr;
char buff[1024] = {'\0'};
char *temp = NULL;
unsigend int line = 0, sumword = 0;
fgets(buff,sizeof(buff),stdin);
if(temp = strchr(buff,'\n'))
*temp = '\0';
if((fr = fopen(buff,"r"))==NULL) fprintf(stderr,"読み込み不可能");
while(fgets(buff,sizeof(buff),fr){
if(temp = strchr(buff,'\n')){
line++;
*temp = '\0';}
sumword += strlen(buff);
}
printf("文字数%u行数%u\n",sumword,line);
fclose(fr);
}
705あい:2007/06/03(日) 11:35:10
すみません
// 合格者 if ( atai[ i ] >= 65 ) {
OKStudent++;
OKSum += atai[ i ];
ここのソースプログラムを詳しくk教えてください。OKStudent++;ところとか


706デフォルトの名無しさん:2007/06/03(日) 11:36:31
OKStudent++;はOKStudent = OKStudent + 1と同じ。
OKSum += atai[ i ];はOKSum = OKSum + atai[ i ];と同じ
707デフォルトの名無しさん:2007/06/03(日) 11:36:58
test
708デフォルトの名無しさん:2007/06/03(日) 11:37:22
>>705 スレ違い。自分で調べるくらいできるでしょ?そりゃインクリメントで値を1加えるという意味。
他に表現するとしたら、n=n+1; やら n+=1; といったものがある。
709あい:2007/06/03(日) 11:38:58
なぜ+1なのですが??しょしんしゃですみません><
710デフォルトの名無しさん:2007/06/03(日) 11:39:58
仕様です。
711デフォルトの名無しさん:2007/06/03(日) 11:40:22
人数を数えているから。
65点以上だったら+1人ずつしていって、100人分を見てる。
ゆっくり落ち着いて考えるんだ。そんなに難しいことは書いたつもりはない。
712デフォルトの名無しさん:2007/06/03(日) 11:40:36
>>709
1足す(引く)って処理は(ループとかいろいろな処理で)頻繁に使うから
言語側で専用の構文(n++ とか n--)用意してくれてんの。
713デフォルトの名無しさん:2007/06/03(日) 11:41:12
ん、俺はなんで+1なんてしてるの?と思ったが
++がなんで+1になるの?って質問だったのか?
714あい:2007/06/03(日) 11:42:31
分かりました。お手数かけてすみません。。。
715デフォルトの名無しさん:2007/06/03(日) 11:46:33
整数値mとnを読みこみ、次式で計算されるSの値を求めて表示するプログラムを、
次式のアルゴリズムに忠実に作成せよ。
 m n
S=Σ Σ(i×j)
i=1 j=1
ただし、上の2重の総和記号の説明のため、m=3,n=2を例として書き下すと以下の
ようになる。
 3 2
S=Σ Σ(i×j)={(1×1);(1×2)}+{(2×1)+(2×2)}+{(3×1)}+(3×2)}
i=1 j=1

[実行例]
mとnの値を入力せよ:3 2
m=3,n=2のとき,s=18

よろしくお願いします。
716デフォルトの名無しさん:2007/06/03(日) 11:47:43
誰しも初心者を通過するので謝ることではない
しかし初心者を原因にするな
717デフォルトの名無しさん:2007/06/03(日) 11:49:56
>>715
for( i = 1; i <= m; i++ ) {
fot( j = 1; j <= n; j++ ) {
sum += i * j;
}
}
動作確認もコンパイルもしていない。
入力、出力くらいは自分でヨロ
718デフォルトの名無しさん:2007/06/03(日) 11:51:41
>>715
#include <stdio.h>

int main(void)
{
int m = 0, n = 0, i, j, S = 0;
printf("mとnの値を入力せよ:");
scanf("%d %d", &m, &n);

for(i=1; i<=m; i++)
{
for(j=1; j<=n; j++)
{
S += i * j;
}
}
printf("m=%d,n=%dのとき,S=%d", m, n, S);
return 0;
}
719デフォルトの名無しさん:2007/06/03(日) 13:01:51
トーマスたん、出ておいで、トーマスたん、もっとクソース書いて下ちゃい ><;
720674:2007/06/03(日) 14:17:44
>>693,701
助かりました.多重化のやり方がいまだによくわからないので
提出が終わったらその手の本で勉強してみます.
721デフォルトの名無しさん:2007/06/03(日) 14:18:18
[1] 授業単元: c言語
[2] 問題文:
5. 挿入法による昇順整列を行なう次のような関数 inssort を定義し,動かし
なさい.

void inssort(int a[], int n)

挿入法の手順

配列の2番目の要素から順に最後尾まで( i= 1, 2, ..., n-1 ) をa[i] として
a[i] の左隣から前方へ,各要素 a[j] について ( j= i-1, ..., 1, 0 )
a[j] とその右隣 a[j+1] が昇順なら break(次の a[i] へ) 
そうでなければ a[j] と右隣とを入れ換える.


[3] 環境
 [3.1] OS:Linux
 [3.2] gcc 3.4 VC 6.0
 [3.3] 言語: C
[4] 期限: ([2007年06月04日12:00まで]
[5] その他の制限:特にありません

よろしくお願いします
722デフォルトの名無しさん:2007/06/03(日) 14:38:12
723デフォルトの名無しさん:2007/06/03(日) 15:12:53
a[j] < a[j + 1] → a[j] <= a[j + 1] にした方が適切じゃね?
追求すると、同じ値の要素が続いた場合、並び替える必要がないものまで並び替えることになるし。

あと、教える場所によって違うみたいだけど、スワップする回数を減らすために
常に隣り合う要素を比較して入れ替えではなく、比較する要素とそれより前の整列された要素の
後ろから順に押し出す形で代入していった方が、計算量が少なくて済む。例をあげるとしたらこんな感じ
ttp://lecture.ecc.u-tokyo.ac.jp/~cichiji/cp-05/cp-05-06-4.html
ttp://www1.cts.ne.jp/~clab/hsample/Sort/Sort2.html

ttp://ja.wikipedia.org/wiki/%E6%8C%BF%E5%85%A5%E3%82%BD%E3%83%BC%E3%83%88
↑これはええんやろか・・・

戯言すまそ。
724デフォルトの名無しさん :2007/06/03(日) 15:53:46
void InsertSort(int num[ ], int n)
{
int i, j, temp;

for (i = 1; i < n; i++) { /* i 番目の要素をソート済みの配列に挿入 */
temp = num[i]; /* i 番目の要素を temp に保存 */
for (j = i; j > 0 && num[j-1] > temp; j--) /* このループで */
num[j] = num[j -1]; /* temp を挿入する位置を決める */

num[j] = temp; /* temp を挿入 */
/* 途中経過を表示 */
}
}
725デフォルトの名無しさん:2007/06/03(日) 16:07:37
/* timp を挿入する位置を決める */
726デフォルトの名無しさん:2007/06/03(日) 16:26:19
>>725
【エラー】挿入先が見つかりません。相手が居ないようです。
727デフォルトの名無しさん:2007/06/03(日) 16:27:51
>>726
まぁ、都合よくエラー修正してくれるコンパイラなら、ちゃんとホールを見つけてきてくれるさ。
ほら、あるでしょ?空気嫁とかw
728デフォルトの名無しさん:2007/06/03(日) 16:31:53
>>727
【致命的なエラー】スペックが足りません。問題を解決するには手術が必要です。
729デフォルトの名無しさん:2007/06/03(日) 16:56:39
つ温めたこんにゃく
730デフォルトの名無しさん:2007/06/03(日) 16:59:21
>>728
wallet += atm(30000);
goto fuzoku;
/* timpの挿入先を動的に確保する */
/* 挿入先の環境はatmの引数により変化 */
731デフォルトの名無しさん:2007/06/03(日) 17:04:11
貯金ねーから俺はこっちで acom(30000);
732デフォルトの名無しさん:2007/06/03(日) 17:16:12
TimPointerException
733デフォルトの名無しさん:2007/06/03(日) 17:43:18
↓無利子でお金が借りられるacom(int)ライブラリを実装しておいて
734デフォルトの名無しさん:2007/06/03(日) 17:52:19
戻り値の型はvoidか
735デフォルトの名無しさん:2007/06/03(日) 17:54:20
return 893;
736デフォルトの名無しさん:2007/06/03(日) 17:55:30
>>735 こらぁ、要らんもん返すなw
737デフォルトの名無しさん:2007/06/03(日) 17:56:27
>>720
真面目に勉強するつもりがあるんなら、若干古さを感じる面もあるが、
故Richard Stevensの
UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894712059/
がお勧め。echo server/clientの例も一番最初の方に載ってる。
738デフォルトの名無しさん:2007/06/03(日) 19:21:56
[1]プログラミング演習
[2]ブラックジャックをコンピューターと対戦するゲームプログラム、実際はトランプを使用して
行われるが、ここでは1〜10の目をもつサイコロをカードの数字として扱う簡易版のブラックジャック
を考える。コンピューターがディーラーユーザーがプレーヤー。21に近いほうが勝ち
手順は以下の通り 1 カードを配る プレーヤーディーラーとも2枚ずつカードを配る。
プレーヤーのカードは2枚とも表向き、ディーラーのカードの1枚は見えないように伏せておく
2 プレーヤーの番 プレーヤーはヒット(カードをもう1枚引く)かスタンド(カードを引かずその時点の
ポイントで勝負)を選択する、21を超えない限り何回でもヒットできる。21を超えると負け
3 ディーラーの番 プレーヤーがスタンドすれば、ディーラーは17以上に
なるまでカードを引かなければならない。また17以上になったらその後カードを引くことはできない。

[3] 環境
 [3.1] OS:Linux
 [3.2] gcc 3.4 VC 6.0
 [3.3] 言語: C
[4] 期限: ([2007年06月04日12:00まで]
[5]rand()関数を使う、各ステップの処理を関数化1ゲームの流れを簡潔に表現する。
  授業が始まって2ヶ月経つんですがまったくわかりません、助けてください・・。
739デフォルトの名無しさん:2007/06/03(日) 19:59:15
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 下に記載
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限:できるだけ早いといいです。

1個以上、10個以内の整数を大きさ10の整数配列に入力するプログラムを作成する.
入力する整数の個数は最初に宣言するものとする.たとえば3と4からなる2個の整数を入力する場合には"2 3 4"と入力する.
つぎに,void swapsmall(int *data, int num);という関数を作成し, dataから始まるアドレスに,順におかれたnum個の整数のうち最小のものを先頭のものと入れ替える機能を与えなさい.
ただし,同一の値をもつ最小の整数が複数ある場合には,一番後方にあるデータと入れ替えるようにすること.プログラミングにあたっては,配列宣言を除き,すべてポインタを用いて処理すること.
順序をswapsmall()を一回適用したあと,配列の内容をスペース(空文字)一つで区切って出力しなさい.最後の数字の後ろに空白を置かないこと.
740デフォルトの名無しさん:2007/06/03(日) 20:12:23
>739
#include <stdio.h>
void swapsmall(int *data, int num)
{
int i, min = 0;
for(i=1; i<num; i++) if(data[min]>=data[i]) min = i;
if(min) {
int temp = data[0];
data[0] = data[min];
data[min] = temp;
}
}
int main(void)
{
int i, num, data[10];
scanf("%d", &num);
for(i=0; i<num; i++) scanf("%d", data+i);
swapsmall(data, num);
for(i=0; i<num-1; i++) printf("%d ",data[i]);
printf("%d", data[i]);
return 0;
}
741デフォルトの名無しさん:2007/06/03(日) 20:23:58
>>738
CUIで良いの?
742デフォルトの名無しさん:2007/06/03(日) 20:33:55
>>738
> [3.1] OS:Linux
> [3.2] gcc 3.4 VC 6.0
コレが気になる。
743デフォルトの名無しさん:2007/06/03(日) 20:50:02
どなたか解いていただけるとありがたいです。
簡単らしいのですがどうも・・・?

[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):
1まずファイルから(ランダムの数値が1000個はいっている”rand1000.dat”という名前のファイル)保存されているデータ数nを読み込み,その数だけデータを読み込み配列に格納する.
2次に,格納された配列をディスプレイ上に表示する.
3そして,データが保存された配列についてバブルソートを実行する関数 bubblesort()を呼び出し,配列データを整列する.
4最後に,整列された配列をディスプレイ上に表示しプログラムを終了する.

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限:6月5日
[5] その他の制限:結果がソートされていることを毎回確認すること.

全く分からないのでどなたかお願い致します。
744デフォルトの名無しさん:2007/06/03(日) 20:59:10
>>743
そのファイルのフォーマットがわからないことにはどうしようもない。
745738:2007/06/03(日) 21:22:38
>>741CUIってなんなんでしょうか?ど素人なんでわからないですすいません。
>>742どういうことですか?すいません
誰か教えてくださいすいません
746デフォルトの名無しさん:2007/06/03(日) 21:23:35
用語が分からなければ自分で調べればいいじゃないか
747デフォルトの名無しさん:2007/06/03(日) 21:38:44
[1]プログラミング演習
[2]キーボードから半角英数字を一字入力して、その文字と文字コード(大文字16進数2桁)を
表示するプログラムを作成しなさい。

条件@:使用する変数はchar型とする
条件A:文字の入力に関してはscanf関数を使用すること

実行結果 (「」の部分はキーボードからの入力)
半角英数字を入力してください:「A」
文字「A」の文字コードは[41」です。

[3] 環境
 [3.1] windows vista business
 [3.2] visual stadio 2005
 [3.3] C
[4] 6月8日
[5] まだC言語を習ったばかりなので、簡単なプログラムでお願いします。
748738:2007/06/03(日) 21:38:55
>>741CUIです。すいません。お願いします。
749デフォルトの名無しさん:2007/06/03(日) 21:44:59
[1]プログラミング演習
[2]キーボードから半角英数字を一字入力して、その文字と次の文字を表示する
プログラムを作成しなさい。(文字コードが連続して設定されていることを確認せよ。
例えば、文字Aが入力されたとすると次の文字としてBが表示される)


条件@:使用する変数はchar型とする
条件A:文字の入力関数に関してはscanf関数を使用すること。
条件B:入力される文字は、0〜8、a〜y、A〜Yとする。これ以外の文字は
入力されないものとする。

実行結果 (「」の部分はキーボードからの入力)
半角英数字を入力してください:「A」
文字「A」の次の文字は[B」です。

[3] 環境
 [3.1] windows vista business
 [3.2] visual stadio 2005
 [3.3] C
[4] 6月8日
[5] まだC言語を習ったばかりなので、簡単なプログラムでお願いします。
750デフォルトの名無しさん:2007/06/03(日) 21:45:32
>>747
#include <stdio.h>

int main(void)
{
    char c;
    printf("半角英数字を入力してください: ");
    if (scanf("%c", &c) == 1)
        printf("文字「%c」の文字コードは「%02X」です。\n", c, (unsigned char)c);
    return 0;
}
751デフォルトの名無しさん:2007/06/03(日) 21:47:45
>>749
#include <stdio.h>

int main(void)
{
    char c;
    printf("半角英数字を入力してください: ");
    if (scanf("%c", &c) == 1)
        printf("文字「%c」の次の文字は「%c」です。\n",
                c, (unsigned char)c+1);
    return 0;
}
752デフォルトの名無しさん:2007/06/03(日) 21:53:37
>>745
無知それ自体は悪いことではない
>ど素人なんで
そんなものはまったく関係ない

gccはWindows版とLinux版があるが
VisualStudioC++6.0はWindowsでしか動かせない
753738:2007/06/03(日) 21:59:56
>>752すいません、僕が授業で使ってるのはLinuxみたいなんですが
たぶんgccだけって事ですか?なにもかもわかんないんですが・・・すいません
754デフォルトの名無しさん:2007/06/03(日) 22:16:41
>>753
すいません何回いうんだよ
なんでも謝ればいいってもんじゃないしさ
そんなんじゃ社会に出てから注意されるし、損するよ

まず自分でなんとかしようと考えないの?
人に聞くのはその後でしょ
いっておくと、WindowsのソフトをLinuxに持っていっても動かないし、逆もまた然り
755デフォルトの名無しさん:2007/06/03(日) 22:18:44
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 下に記載
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限:特にありません

長さ256文字以下の英数字,空白の並びからなる文字列を二つ入力し,それぞれをT1, T2とする. T1の中にT2が出現する場合に,その一番左に現れる文字列の先頭アドレスを値として返す関数 char *findstr(char *t1, char *t2);を作成しなさい.
ただし,T1の中にT2が出現しないときはNULLを値として返すものとする.
findstr()の中で,比較対象となるT1のなかの先頭文字を先頭から一文字ずつずらして 7-2で用いたchkmatch()を呼び出すことにより要求を満たす関数を作成することができる.
この関数を用いて, 1)最初にT1を表示し,2)その次にT1の中でT2の文字列が出現するまでの文字をスペース(' ')として端末に出力し,そのあとT2の文字列文だけ(’^’)を出力し、
再度T2の文字列が出現するまでスペース(’ ’)を出力し..というプロセスを文末まで続けるプログラムを作成しなさい。
3a)このプロセスは、findstrを実行して文字列の先頭を検索し、そこまでスペースを出力する。
3b)文字列の先頭が検出されたら、T2の文字列分だけ(’^’)を出力する。
3c)T2の文字列分だけポインタを進め、そこからfindstrを再実行する(3aにもどる)というプロセスを繰り返すことで完成する。
4)T2がT1に出現しない場合はT1の文字数だけのスペースが表示されるようにすること.
プログラミングにあたっては,配列宣言を除き,すべてポインタを用いて処理すること.文字列は60文字以下が入力されるものとし,文字列の長さに関するエラー処理をする必要はない
756デフォルトの名無しさん:2007/06/03(日) 22:19:39
丸投げスレでgdgd説教している方がうぜーんだよ
お前どっか他所へいけよ?お前なんて誰も求めてねーよ
あっ、日ごろ相手にされていないからこういう場所で偉そうにしてんだwwww
757デフォルトの名無しさん:2007/06/03(日) 22:25:14
758デフォルトの名無しさん:2007/06/03(日) 22:26:20
759738:2007/06/03(日) 22:26:58
>>754自分でなんとかしようと思ったんですができなくて明日レポート提出なんです。
それをだせないと留年になってしまうかもしれないのであせってしまって・・・。
Linuxのソフトは学校のパソコンにもとから入ってると思います。
738の文のどこがおかしいのでしょうか?
760デフォルトの名無しさん:2007/06/03(日) 22:36:23
留年するもまた一興
761デフォルトの名無しさん:2007/06/03(日) 22:37:38
>>280の影響を受けてHTML形式に出力するプログラムを作っちゃいますた♪
762738:2007/06/03(日) 22:39:01
>>760ちょっと待ってください・・・留年はマジでまずいんでお願いします。
授業でemacsかなんか使ってやってるんですが教科書見てもわからないんですよ・・・。
マジで助けてください
763デフォルトの名無しさん:2007/06/03(日) 22:40:32
誰か助けてくれるんじゃない
俺はその気はないってだけなので、気にするな
764デフォルトの名無しさん:2007/06/03(日) 22:41:05
留年まずいなら
なんで努力しようと思わなかったんだろうか・・・
楽なことしかしてないじゃん
765738:2007/06/03(日) 22:41:46
>>758うおおおおおすごい。ありがとうございます!めっちゃ助かりました。
僕もいつかここで教えられるようになりたいです。。
766デフォルトの名無しさん:2007/06/03(日) 22:42:10
まあまあ、誰かが助けてくれるだろうから、それまで待とうや
767デフォルトの名無しさん:2007/06/03(日) 22:43:25
>>755
chkmatch()とやらが何者だか分からないと仕方が無いぞ
768デフォルトの名無しさん:2007/06/03(日) 22:45:10
>758
初期表示ちょっと間違ってない?伏せるの1枚では?

...今さら感もあるがせっかく作ったのでうp
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4145.txt


769738:2007/06/03(日) 22:46:34
>>768え?間違ってるんですか?必死で入力してたんですが。。。
770デフォルトの名無しさん:2007/06/03(日) 22:51:38
>>738
完全に出遅れたけどせっかくだから。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4146.txt
771738:2007/06/03(日) 22:55:37
うわ、みんなめっちゃ優しい。。ほんとにありがとうございます。
どれを参考にしたらいいんですかね・・・。なんかどれもちょっとやり方
違うみたいですけどいいんですかね?
772デフォルトの名無しさん:2007/06/03(日) 23:01:55
>>771
直感だ
773747:2007/06/03(日) 23:02:09
>>750
作ってもらって、本当に申し訳ないのですが
if (scanf("%c", &c) == 1)
(unsigned char)
をまだ習って無いので、それらを省いて作成していただけないでしょうか??

774749:2007/06/03(日) 23:04:08
>>751
作ってもらって、本当に申し訳ないのですが
if (scanf("%c", &c) == 1)
(unsigned char)
をまだ習って無いので、それらを省いて作成していただけないでしょうか??

775デフォルトの名無しさん:2007/06/03(日) 23:04:49
>>773
scanf使えって書いてなかった?
何を習ってないの君
if文?
776デフォルトの名無しさん:2007/06/03(日) 23:06:28
>>771
入力処理がしっかりしてるかどうかで選ぶといい。
777デフォルトの名無しさん:2007/06/03(日) 23:07:15
>>747
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char c;
printf("半角英数字を入力してください: ");
scanf("%c", &c);
if( isprint(c) )
printf("文字「%c」の文字コードは「%02X」です。\n", c, c);
return 0;
}
778758:2007/06/03(日) 23:08:16
>>769>>768
>>768の言う通りshowsCardの動作が間違ってる。よく読まずにやってもうた。
もう一箇所1〜10の乱数を作る部分が間違ってて11の乱数が出来る事がある。
自分で言うのもなんだが、全体的に設計が十分でなくて、取り合えず作りました的な悪臭がする。
>>769
>うわ、みんなめっちゃ優しい。。ほんとにありがとうございます。
やさしいと言うより、プログラムが好きだからみんなやるんだと思う。
>なんかどれもちょっとやり方 違うみたいですけどいいんですかね?
取り合えず、仕様通りならOK。色々比較してそれぞれの良い所を参考にしな。
779真・747:2007/06/03(日) 23:09:06
>>777
作ってもらって申し訳ないのですが
> if( isprint(c) )
をまだ習ってないので、これを省いて作成していただけないでしょうか??
780デフォルトの名無しさん:2007/06/03(日) 23:09:57
>771
流れの理解しやすさで。

自分で説明をしなければならないのだろ?
781デフォルトの名無しさん:2007/06/03(日) 23:10:57
>>779
if( isprint(c) ) > if( c>=32 && c<=126 )
782デフォルトの名無しさん:2007/06/03(日) 23:11:02
>>738
みんなが優しいと思うのは勝手だが、
ホントにお前のためを思うのなら誰も解答など書かないだろう。
正直、留年をお勧めするね。
783デフォルトの名無しさん:2007/06/03(日) 23:12:15
今日は説教強盗が多いな
784749:2007/06/03(日) 23:12:18
>>775
if文です
785デフォルトの名無しさん:2007/06/03(日) 23:13:22
786デフォルトの名無しさん:2007/06/03(日) 23:17:49
>>785
長門は俺の嫁
787デフォルトの名無しさん:2007/06/03(日) 23:19:05
>>786
ttp://www.falcom.co.jp/sora_3rd/character/renne.html
おみゃ〜さんにはこっちの相手がお似合いさ。
788デフォルトの名無しさん:2007/06/03(日) 23:19:43
>>784
それくらい自分で学べよw
789デフォルトの名無しさん:2007/06/03(日) 23:20:05
>>785
なんだこれ
>>761の成果物か?
790デフォルトの名無しさん:2007/06/03(日) 23:20:44
>>785
なんかアニメっぽい変なキャラクターが表示されたけど、これって何だ?
アニメとか全然興味ないからわからん。
791デフォルトの名無しさん:2007/06/03(日) 23:22:16
50 モシ X+Y=24 ナラバ Z=50
60 これって恋の方程式ね・・・
70 ボクもうがまんできないよ
80 んもう。70クンのエッチ! 210ニイケ!
792749:2007/06/03(日) 23:23:17
>>788
すいません・・バカなのでわからないッス
793デフォルトの名無しさん:2007/06/03(日) 23:29:08
>>792
英文:if i were a bird, i could fly to you.
和訳:やらないか
794デフォルトの名無しさん:2007/06/03(日) 23:30:58
ξ゚听)ξscanf使ってるならifもすぐわかるでしょ!
795デフォルトの名無しさん:2007/06/03(日) 23:32:05
scanfより3文字も短いしな
796デフォルトの名無しさん:2007/06/03(日) 23:32:07
>>792
もう、全部省いてこれでいいんじゃね?
#include<stdio.h>
int main(void)
{
char c;
printf("半角英数字を入力してください:");
scanf("%c", &c);
printf("文字「%c」の文字コードは「%02X」です。\n", c, c);
return 0;
}
797デフォルトの名無しさん:2007/06/03(日) 23:33:08
798デフォルトの名無しさん:2007/06/03(日) 23:42:01
もしかして>>749はifの条件式の中にscanfが書いてあるのがわからないのか?
799デフォルトの名無しさん:2007/06/03(日) 23:50:32
755の問題の補足です!

長さ256以下の英数字,空白の並びからなる文字列を二つ入力し,それぞれをT1, T2とする. T1が"ABC",T2が"AB"の場合のように,T2の先頭部分がT1の先頭部分に含まれるときは1を,そうでないときは0を値として返す関数 int chkmatch(char *t1, char *t2)
800デフォルトの名無しさん:2007/06/04(月) 00:07:46
C言語です。
@3行5列の二次元配列に15個の数字をランダムで選ぶ(ただし、必ず12を入れる)
A配列に入れられた数字を
B大きい順に配列に入れ直して示す。(バブルソートで)
C小さい順(バブルソートで)
Dprintfで12の行、列を出力
if,do,wihle習いました。お願いしますm(_ _)m
801デフォルトの名無しさん:2007/06/04(月) 00:10:20
C言語です。
@3行5列の二次元配列に15個の数字をランダムで選ぶ(ただし、必ず12を入れる)
A配列に入れられた数字を
B大きい順に配列に入れ直して示す。(バブルソートで)
C小さい順(バブルソートで)
Dprintfで12の行、列を出力
if,do,wihle習いました。お願いしますm(_ _)m
802 ◆HFYa0.2pYo :2007/06/04(月) 00:20:40
[1] 授業単元:プログラミング演習
[2] 問題文:

@数字が任意の数だけ書かれたファイル(data.txt)から、それらを配列として読み取る
A読み取った配列を、それ以降のプログラムで使う。
B読み取った数字の個数を表示する。

以上の全ての条件を満たすためには、
どのようなプログラムを書けばよいでしょうか?

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:本日12時
[5] その他の制限:なし
803802:2007/06/04(月) 00:29:46
すみません。
Aの「それ以降のプログラム」は数値計算です。
804デフォルトの名無しさん:2007/06/04(月) 00:32:02
そのdata.txtにはどういう風に数字が書かれているんだ?
1
2
3
なのか
1 2 3 ...なのか1,2,3,...なのか色々あるだろ
805デフォルトの名無しさん:2007/06/04(月) 00:32:23
>>755
#include <stdio.h>
#include <string.h>
int chkmatch(char *t1, char *t2) {
    while (*t1 && *t2 && *t1++ == *t2++) {}
    return !*t2;
}
char *findstr(char *t1, char *t2) {
    for (;*t1 && !chkmatch(t1, t2); ++t1) {}
    return *t1 ? t1 : 0;
}
int main(void)
{
    char *T1, *T2, *p, *q;
    int i, n;
    T1 = malloc(258); T2 = malloc(258);
    while (fgets(T1, 256, stdin) && fgets(T2, 256, stdin)) {
        if (p = strchr(T1, '\n')) *p = 0;
        if (p = strchr(T2, '\n')) *p = 0;
        puts(T1);
        for (p = T1, n = strlen(T2); q = findstr(p, T2); p = q + n) {
            for (i = 0; i < q - p; ++i) putchar(' ');
            for (i = 0; i < n; ++i) putchar('^');
        }
        n = T1 + strlen(T1) - p;
        for (i = 0; i < n; ++i) putchar(' ');
        putchar('\n');
    }
    free(T1); free(T2);
    return 0;
}
806802:2007/06/04(月) 00:36:46
>804
1 2 3 ... です。数字の並び順はばらばらです
807デフォルトの名無しさん:2007/06/04(月) 00:45:36
>>802
#include <stdio.h>
#include <stdlib.h>

typedef struct NV { int *v, sz, cp; } NV;
int main(void)
{
    int i, n;
    NV nv = { malloc(sizeof(int)), 0, 1 };
    /* ヨム */
    while (scanf("%d", &n) == 1) {
        if (nv.sz == nv.cp)
            nv.v = realloc(nv.v, nv.cp *= 2);
        nv.v[nv.sz++] = n;
    }
    /* テキトウニツカウ */
    for (i = 0, n = 0; i < nv.sz; ++i)
        n += nv.v[i];
    /* コスウヲヒョウジ */
    printf("%d個\n", nv.sz);
    free(nv.v);
    return 0;
}
808802:2007/06/04(月) 00:54:06
>>807
ありがとうございました。
早速やってみます。
809デフォルトの名無しさん:2007/06/04(月) 00:56:54
aa
810デフォルトの名無しさん:2007/06/04(月) 01:10:45
>>755
凄い人がもう答えてしまったが、せっかくなんであげとく。
初心者はこっちの方が見やすいんじゃね(俺も初心者だから)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4147.c
811デフォルトの名無しさん:2007/06/04(月) 01:41:42
問題2
実行結果となるように、読み込んだ整数の段数をもつピラミッドを表示するプログラムを作成せよソースファイル名はprog02.c,データファイル名はprog02.datとしなさい。
<実行結果例>
何段ですか?5

*
***
*****
*******
*********


812810:2007/06/04(月) 01:42:51
>>755
すまんchkmatch()がバグ入りだった。
abcde
ee
とやったときにeに^がついちゃってたから修正した。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4149.c
813デフォルトの名無しさん:2007/06/04(月) 01:44:52
問題7
縦 m 個,横 n 個の値を持つ表データを考える。
(m,nはそれぞれscanfを使ってユーザーが指定できるようにする。)
この表データの各行および各列の合計値と平均値を計算して表示しなさい。
(行数 m ,列数 n の最大個数はそれぞれ10とする。)
ソースファイル名はprog07.c,データファイル名はprog07.datとしなさい。
<実行結果例>
  行数:3
  列数:4
  1行目のデータを入力してください。
  7.7
  4.4
  8.8
  7.5
  2行目のデータを入力してください4.0 3.8
  3.4
  4.2
  3行目のデータを入力してください。
  4.8
  5.8
  8.0
  7.5
  ------------------------------------------
7.70  4.40  8.80  7.50  | 28.40 |  7.10
  4.00  3.80  3.40  4.20  | 15.40 |  3.85
  4.80  5.80  8.00  7.50  | 26.10 |  6.53
  ------------------------------------------
  16.50  14.00  20.20  19.20
  ------------------------------------------
  5.50  4.67  6.73  6.40
814デフォルトの名無しさん:2007/06/04(月) 01:47:35
問題8
年利 n% の銀行にある金額を預けたとき、その預金が元金の2倍に達するまでの年数を計算するプログラムを作成せよ。ソースファイル名はprog08.c,データファイル名はprog08.datとしなさい。
<実行結果例>

年利を入力してください。[%]
1.0
金額を入力してください。[¥]
1000000
2倍に達するまで、70年です。
  

いずれともC言語です。
よろしくおねがいします
815デフォルトの名無しさん:2007/06/04(月) 01:49:05
>>811
#include <stdio.h>

int main()
{
    int x, y, dansuu;

    scanf("%d", &dansuu);

    for (y=0 ; y<dansuu ; y++)
    {
        printf("*");
        for (x=0 ; x<y ; x++)
        {
            printf("**");
        }
        printf("\n");
    }
    return 0;
}
816デフォルトの名無しさん:2007/06/04(月) 01:56:13
>>811
#include <stdio.h>
int main(void)
{
    int i, j, n;
    printf("何段ですか?");
    if (scanf("%d", &n) == 1 && n > 0) {
        for (i = 1; i <= n; ++i) {
            for (j = 0; j < n - i; ++j)
                putchar(' ');
            for (j = 0; j < 2 * i - 1; ++j)
                putchar('*');
            putchar('\n');
        }
    }
    return 0;
}
817807:2007/06/04(月) 02:11:35
すまん
- nv.v = realloc(nv.v, nv.cp *= 2);
+ nv.v = realloc(nv.v, sizeof(int)*(nv.cp *= 2));
818デフォルトの名無しさん:2007/06/04(月) 03:06:46
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 下に記載
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C++
[4] 期限: 6月5日(できるだけはやくお願いします)
[5] その他の制限: 初心者です。for文を使います

【問題】整数xを読み込み、1からxまでで、3で割り切れて、かつ、4で割り切れない数値を出力するとともに、その数値の個数を出力するプログラム
【実行例1】INPUT INTEGER -->20
 3 6 9 15 18 の 5 こ
【実行例2】INPUT INTEGER -->35
3 6 9 15 18 21 27 30 33 の 9 こ

よろしくお願いします
819デフォルトの名無しさん:2007/06/04(月) 04:11:03
>>818
#include <stdio.h>

int main(void)
{
int i, x, n = 0;
printf("INPUT INTEGER -->");
scanf("%d", &x);
for (i = 0; i <= x; i++) {
if (i % 3 == 0 && i % 4 != 0) {
printf("%d ", i);
n++;
}
}
printf("の %d こ\n", n);
return 0;
}
820デフォルトの名無しさん:2007/06/04(月) 06:02:18
821デフォルトの名無しさん:2007/06/04(月) 06:22:40
>>814
#include <stdio.h>
#include <stdlib.h>
#define GOAL 2
int main(void)
{
char buf[256];
double rate;
double first_money;
double money;
int year;
printf("年利を入力してください。[%%]\n");
scanf("%s", buf);
rate = atof(buf);
printf("金額を入力してください。[\\]\n");
scanf("%s", buf);
first_money = atof(buf);
year = 0;
money = first_money;
while (money < first_money * GOAL) {
year++;
money += money * rate / 100;
}
printf("%d倍に達するまで、%d年です。\n", GOAL, year);
return 0;
}
822デフォルトの名無しさん:2007/06/04(月) 09:52:58
さぁ、俺にも簡単に解ける、あるいは俺が過去に解いたことのある宿題を質問しろやゴルァ!
823デフォルトの名無しさん:2007/06/04(月) 10:24:59
>>822
824デフォルトの名無しさん:2007/06/04(月) 11:17:34
>>823 いちいち疑問に思っているくらいなら俺が解ける宿題を質問してこい!w
825デフォルトの名無しさん:2007/06/04(月) 12:04:51
>>824
よく分らないけど、簡単な問題出して欲しいの?
俺がちょっと面白いと感じた簡単な問題(入出力と演算だけで解ける)をやって見る?
問題:1桁以上の整数を読み込んで、その整数の下一桁を表示せよ。

整数を入力汁:9563
下一桁は:3
826デフォルトの名無しさん:2007/06/04(月) 12:24:29
言うほど面白いか?いや822じゃないのに書き込んでる俺も俺だけど
#include <stdio.h>
#include <string.h>
int main(void)
{
int i;
char buf[256];
puts("整数を入力してください。");
scanf("%d",&i);
sprintf(buf,"%d",i);
printf("%dの下一桁は%cです。",i,buf[strlen(buf)-1]);
return 0;
}
827825:2007/06/04(月) 12:26:51
>>825で大切な事を忘れてた。1桁以上の整数を読み込んででは大切な事が1つ抜けてて
1桁以上の"正の"整数を読み込んでが正しい。
828デフォルトの名無しさん:2007/06/04(月) 12:27:14
%10でいいじゃん。
829826:2007/06/04(月) 12:28:52
あ、たすかに。
830825:2007/06/04(月) 12:33:27
>>826
関数を使わなくても、>>828が言うように演算だけで
出るところがちょっと面白いと感じた。熟練者には分らない
万年初心者の新鮮な驚きかな?
831デフォルトの名無しさん:2007/06/04(月) 12:42:30
んじゃ、プログラミングと数学の楽しさが伝わる問題を一つ。

abcabcの形式の4-6桁の整数(例えば12012は5桁だが012の繰り返しになっている)は常に7で割り切れる。
Ex.987987 / 7 → 141141、141141 / 7 → 20163
・これをプログラムで確認せよ。また、何故7で割り切れるのか考察せよ。
832デフォルトの名無しさん:2007/06/04(月) 12:54:18
>>831
#include <stdio.h>
int main(void)
{
    int i;
    for (i = 1; i < 1000; ++i)
        printf("%d % 7 = %d\n", i * 1001, i * 1001 % 7);
    return 0;
}

考察:1001が7で割り切れるから。そんだけ。
833デフォルトの名無しさん:2007/06/04(月) 12:56:43
小学生の算数レベルだろ
834832:2007/06/04(月) 12:57:14
うわ
- printf("%d % 7 = %d\n", i * 1001, i * 1001 % 7);
+ printf("%d %% 7 = %d\n", i * 1001, i * 1001 % 7);
835デフォルトの名無しさん:2007/06/04(月) 13:15:50
>>743のプログラムを以下のファイルを使って作ってもらえるとありがたいです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4151.txt
836デフォルトの名無しさん:2007/06/04(月) 13:30:17
>835
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void bubblesort(int *data, int n)
{
int i, j;
for(i=0; i<n-1; i++) for(j=n-1; j>i; j--) if(data[j]>data[j-1]) swap(data+j, data+j-1);
}

int main(void)
{
int i, n, data[1000];
FILE *fp;
if((fp=fopen("rand1000.data", "r"))==NULL) return 0;
fscanf(fp, "%d", &n);
for(i=0; i<n; i++) fscanf(fp, "%d", data + i);
for(i=0; i<n; i++) printf("%d ", data[i]);
bubblesort(data, n);
for(i=0; i<n; i++) printf("%d ", data[i]);
fclose(fp);
return 0;
}
837デフォルトの名無しさん:2007/06/04(月) 13:51:45
動きました!

ありがとうございます。ありがとうございます。
838デフォルトの名無しさん:2007/06/04(月) 13:53:49
前スレでプログラムしてもらった宿題でc++で記述のところをc言語でプログラム
されていたので、c++に文法を変えてもらえませんか。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4026.c
839デフォルトの名無しさん:2007/06/04(月) 13:57:04
Cに無くて C++にはある予約語 (new delete 等) 使われてないし、
C++ の文法にのっとってるから、そのまま拡張子を .cpp にでもすれば?

# C++ ならではの書き方してくれ ってのなら、また別か
840デフォルトの名無しさん:2007/06/04(月) 14:02:59
>>838
#include <stdio.h>

#include <cstdio>
using namespace std;
に。
それでC++プログラムになる。
841デフォルトの名無しさん:2007/06/04(月) 14:07:20
842デフォルトの名無しさん:2007/06/04(月) 14:10:44
っつか、きんもぉ〜☆なソースだなぁ・・・。もちっと、問題文と回答を別のライブラリにまとめて
管理すりゃスッキリするのに。
843デフォルトの名無しさん:2007/06/04(月) 14:13:59
[1] 授業単元: C++実習
[2] 問題文(含コード&リンク):
if文、 if~else~文、 if~else if~else文、 switch文、 三項演算子、をすべて用いてクイズを作成しなさい
反復文は使えないものとし、同じ問題はでないものとする
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] visual studio2005
 [3.3] 言語: C++
[4] 期限: 5/25まで
[5] その他の制限: 特になし

この課題か。反復文は使えないって、どんな条件や・・・学校名晒さんかいゴルァ!w
844デフォルトの名無しさん:2007/06/04(月) 14:23:00
ifとgotoや再帰でどうにかしろということでは>反復文
845デフォルトの名無しさん:2007/06/04(月) 14:40:34
再帰だけにサイキック(念力)ではないかと
846デフォルトの名無しさん:2007/06/04(月) 15:13:06
きんもぉ〜☆なソースを作ったものですが。
自分で見てもキモイコードだなと思う。言い訳させてもらうと
最初は真面目に書いていたのよ。でも、やってる内に
真面目にやるのがバカらしくなって、ふざけた問題にしてみたりして
遊んでたら止まらなくなって、終には、伝統あるこのスレで
最もキモイコードが出来上がってしまった。
847デフォルトの名無しさん:2007/06/04(月) 15:26:45
>>846
まぁ、コードはともかく、文章がツンデレなのは・・・ヲタかい?w
848デフォルトの名無しさん:2007/06/04(月) 15:44:39
[1] 授業単元:情報実習
[2] 問題文(含コード&リンク):
10人分の成績を入力して、60点以上の人の人数を表示し、60点以上の人の合計点
ならびに平均点(小数点以下1桁まで)を表示するプログラムを作れ。
[3] 環境
 [3.1] OS:Windows2000
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C
[4] 期限:06/06まで
[5] その他の制限:特になし

お手数ですが、どなたかよろしくお願いします。
849デフォルトの名無しさん:2007/06/04(月) 19:45:29
850デフォルトの名無しさん:2007/06/04(月) 20:09:50
>>847
オタですが何か?ミリオタにツンデレは関係ないはずですが。
何故俺がオタだとわかったんだ?
ちなみに、あの問題はナイスバディーで色気ムンムンの
講師をイメージして作ってみた。
851デフォルトの名無しさん:2007/06/04(月) 20:39:16
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):
char *month_name(int n)という関数を作りその中でstatic char *month_name[] = { "January",...
と初期化と宣言をする。そしてmain文中でscanfを使って値を読み込み、関数を呼び出して月の名前を英語で出力させる
プログラムを作れ。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:06/06まで
[5] その他の制限:特になし

よろしくお願いします
852デフォルトの名無しさん:2007/06/04(月) 20:49:58
>>851
#include <stdio.h>
char *month_name(int n) {
static char *month_name[] =
{ "January","Feb","Mar","Apl","May","Jun",
"Jul","Aug","Sep","Oct","Nov","Dec"};
return month_name[n-1];
}
int main(void) {
int month;
char *m_n;
printf("Input > ");
scanf("%d",&month);
if(month<1 || month>12) return 1;
m_n=month_name(month);
printf("%s",m_n);
return 0;
}
853デフォルトの名無しさん:2007/06/04(月) 20:52:35
AplじゃなくてAprかw
854デフォルトの名無しさん:2007/06/04(月) 20:59:54
>>852
動きました。
ありがとうございます。
855 ◆HFYa0.2pYo :2007/06/04(月) 22:57:59
[1] 授業単元:プログラミング演習
[2] 問題文:
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4154.txt
マージソートを行うプログラムなのですが、コンパイルはできても、実行時に
エラーがでてしまいます。
間違っている部分を指摘していただけないでしょうか。

マージソートの説明はこのページにあります。
ttp://www.codereading.com/algo_and_ds/algo/merge_sort.html

[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2007年6月5日
[5] その他の制限:アップしたソースコードをできるだけ変えないでいただけると
         ありがたいです。
856デフォルトの名無しさん:2007/06/04(月) 23:06:31
>>855
全角スペース入れてんじゃねーぞゴルァ!ってことだ。
ちゃんとコンパイラが出すエラーをチェックしやがれってやんでぇい
857デフォルトの名無しさん:2007/06/04(月) 23:08:34
>>855
全角スペース除いたら実行できるしエラーは出ないな。結果間違ってるけど。
wikiにマージソート載ってるからそれコピペしたら?
858デフォルトの名無しさん:2007/06/04(月) 23:23:22
859デフォルトの名無しさん:2007/06/04(月) 23:33:46
>>858
Wikipediaにはソース載ってないんだね
860デフォルトの名無しさん:2007/06/04(月) 23:36:16
英語の方は載ってるんだぜ
861855:2007/06/04(月) 23:36:26
>>856>>857>>858
ありがとうございます。
結果も間違ってますね
このプログラムを元にいろいろと手を加えていくので、できればこのソースの形を生かしたいのです。

よろしければ、修正点を教えていただけませんか。
862デフォルトの名無しさん:2007/06/04(月) 23:50:30
>>861
詳しく読んでないけど、++とか--の使い方を間違っている気がする
863デフォルトの名無しさん:2007/06/04(月) 23:51:30
>>860
そっ、そりはマージですかぁ?
864デフォルトの名無しさん:2007/06/04(月) 23:51:40
>>818です
>>819さんありがとう。
書き忘れていたのですが、最近C++から習い始めた初心者で、C言語がわかりません。どなたかC++に直してもらえませんか?
あと>>819では、if と forを使っていますが、このプログラムをforだけ使ってでもできませんかねえ?
申し訳ないですがよろしくお願いします。
865デフォルトの名無しさん:2007/06/04(月) 23:53:00
ttp://en.wikipedia.org/wiki/Mergesort
Oh!マージでしたぁ。
866デフォルトの名無しさん:2007/06/04(月) 23:56:17
>>861
よく読みなおしたら間違ってるのは--だけだね
867not 819:2007/06/05(火) 00:02:19
>>864
俺ならこんなプログラムは窓から投げ捨てる。
#include <iostream>
using namespace std;
int main()
{
    int x, nc = 0;
    cout << "INPUT INTEGER -->" << flush;
    for (;cin >> x && x > 0;) {
        for (int i = 3; i < x; ++i) {
            for (;i % 3 == 0 && i % 4 != 0;) {
                cout << i << ' ';
                ++nc;
                break;
            }
        }
        cout << "の " << nc << " こ" << endl;
        break;
    }
    return 0;
}
868861:2007/06/05(火) 00:21:27
>>866
ありがとうございました。
いろいろ書き直してみます。
869デフォルトの名無しさん:2007/06/05(火) 00:37:35
>>800お願いします(;_;)
870デフォルトの名無しさん:2007/06/05(火) 00:39:49
>>849さん ありがとうございます。
ぜひ参考にさせていただきます。
871デフォルトの名無しさん:2007/06/05(火) 00:40:44
> if,do,wihle習いました。お願いしますm(_ _)m
    ^^^^^
このへんが気になる。
872デフォルトの名無しさん:2007/06/05(火) 00:48:03
>>871
そういうことを気にしていると、すぐに禿げるよw
873デフォルトの名無しさん:2007/06/05(火) 00:49:47
あれだ
ワイフルって、親身になってお金の相談受けてくれるけど
叱咤激励だけで絶対貸してくれないっていう漫画ネタ
874デフォルトの名無しさん:2007/06/05(火) 00:50:58
#include "stdio.h"
#define ARRAY_LENGTH 15
#define DEBUG_PRINTF(x) printf("%d\n",x);
int target_array[ARRAY_LENGTH];
int tmp[ARRAY_LENGTH];

void merge_sort(int array[], int length);
void merge(int first[], int second[], int len1, int len2);
int comp(int a, int b);
void show_result(int array[], int length);
void rand_array(int array[], int length);

int main(){
int length = ARRAY_LENGTH;
rand_array(target_array, length);
printf("--BEFORE--\n");
show_result(target_array, length);
merge_sort(target_array, length);
printf("--AFTER--\n");
show_result(target_array, length);
return 0;
}

void merge_sort(int array[], int length){
int mid = length / 2;
if(length > 2){
merge_sort(&(array[0]) , mid );
merge_sort(&(array[mid]), length - mid );
}
merge(&(array[0]), &(array[mid]) ,mid ,length - mid);
}
875デフォルトの名無しさん:2007/06/05(火) 00:51:16
>>872
禿ってかっこよくね?ナメック星人みたいで
876デフォルトの名無しさん:2007/06/05(火) 00:52:45
void merge(int first[], int second[], int len1, int len2){
int i = 0;
int cnt1=0;
int cnt2=0;
int flag = 0;

for(i=0 ; i<(len1+len2) ; i++){

if(len1 == cnt1){
flag = 2;
}else if(len2 == cnt2){
flag = 1;
}else{
flag = comp(first[cnt1],second[cnt2]);
}

switch(flag){
case 0: tmp[i] = first[cnt1++]; break;
case 1: tmp[i] = first[cnt1++]; break;
case 2: tmp[i] = second[cnt2++]; break;
}
}
for(i = 0 ; i<len1+len2 ; i++){
first[i] = tmp[i];
}
}
877デフォルトの名無しさん:2007/06/05(火) 00:53:01
>>867
参考になりました。たしかにわけわかんなくて捨てたくなる…
if使用でやることにします。ありがとうございました。
878デフォルトの名無しさん:2007/06/05(火) 01:31:34
>>875
それはつまり
禿げたら地球人じゃないってことか?w
879デフォルトの名無しさん:2007/06/05(火) 10:08:05
>>864 やってみた
#include<iostream>
using namespace std;
int main(void){
    int x, nc=0;
    cout << "INPUT INTEGER --> " << flush;
    cin >> x;
    for(int i=3;i<x;i+=3*4){
        for(int j=0;j<3 && i+j*3<x;j++){
            cout << i+j*3 << ' ';
            nc++;
        }
    }
    cout << "の " << nc << " こ" << endl;
    return 0;
}
880デフォルトの名無しさん:2007/06/05(火) 10:21:54
>>879 の訂正
i<x

i<=x

i+j*3<x

i+j*3<=x
881デフォルトの名無しさん:2007/06/05(火) 10:53:42
[1] 授業単元: C言語 
[2] 問題文(含コード&リンク):
共用体を用いて,2バイト整数の上下バイトを入れ換えて暗号化する関数 short encode(short)を作り,キーボードから入力した整数を暗号化/復号化するプログラムを作りなさい。
但し,main関数の部分は次のコードを用いなさい。
main(){
short n, m, k;
while (1) {
printf("整数を入力して下さい(終了は0) = "); scanf("%d", &n);
if (n == 0) break;
m = encode(n); /* 暗号化 */
printf("\n\t%d を暗号化すると %d になります。\n", n, m);
k = encode(m); /* 復号化 */
printf("\n\t%d を復号化すると %d になります。\n\n", m, k);}}
▼出力例
整数を入力して下さい(終了は0)= 123↵
123を暗号化すると31488になります。
31488を復号化すると123になります。

整数を入力して下さい(終了は0)= -123↵
-123を暗号化すると-31233になります。
-31233を復号化すると-123になります。

整数を入力して下さい(終了は0)= 0↵
[3] 環境
 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: borland  [3.3] 言語: C
[4] 期限: 6月7日




882デフォルトの名無しさん:2007/06/05(火) 10:59:16
[1] 授業単元: プログラミング
[3] 環境
 [3.1] OS: (Windows/Linux/等々) Windowsxp
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語:C

#include<stdio.h>

int main(void)
{
int a,b;
puts("2つの整数を入力してください");

printf("整数a:");
scanf("%d",&a);

printf("整数b:");
scanf("%d",&b);

if(a==b)
puts("aとbは等しいです");

else if("a>b")
puts("aはbより大きいです");

else puts("aはbより小さいです");
return(0);
}

整数a、bの大小関係を表示したいんですけど、a<bのときも
aはbより大きいです と表示されます。どこが間違ってるのか教えてください
883デフォルトの名無しさん:2007/06/05(火) 11:14:17
else if("a>b")

else if(a>b)
884デフォルトの名無しさん:2007/06/05(火) 11:19:15
>>881
short encode(short value){
return ((value&0xff)<<8)|((value>>8)&0xff);
}
885デフォルトの名無しさん:2007/06/05(火) 11:19:37
前スレで(ログ落ちたのでレス番がわからない。
銀行の複利と単利の宿題を出させてもらったのですが、計算が間違っていました。
このソースの1の銀行がAの銀行の預金額を超えるのは24年と二ヵ月後になるはずなんです。ですが3年後に計算されてました
あと次の先に1億200万たまる銀行は1か2の問題は一年11ヵ月後になるはずです。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4010.cpp
よろしくお願いします。
886882:2007/06/05(火) 11:30:27
>>883
ありがとうございます!
887デフォルトの名無しさん:2007/06/05(火) 11:53:42
>>881
short encode(short value){
    union{
        short value;
        struct{unsigned char b1,b2;};
    }a;
    unsigned char temp;
    a.value=value;
    temp=a.b1;
    a.b1=a.b2;
    a.b2=temp;
    return a.value;
}
888デフォルトの名無しさん:2007/06/05(火) 12:03:15
>>885
「なるはず」の根拠はどこから?
預金額の数値が分かるなら、どこが違うか分かるかも
889デフォルトの名無しさん:2007/06/05(火) 12:07:28
C言語です。
@3行5列の二次元配列に15個の数字をランダムで選ぶ(ただし、必ず12を入れる)
A配列に入れられた数字を
B大きい順に配列に入れ直して示す。(バブルソートで)
C小さい順(バブルソートで)
Dprintfで12の行、列を出力
if,do,wihle習いました。誰かお願いしますm(_ _)m
6月7日までです。
890デフォルトの名無しさん:2007/06/05(火) 12:11:58
>>888 問題文を筆記で計算してみたところそうなりました。
ソースが読み取れなくて、どういう風にプログラム内で計算されてるかわからず
計算部分が修正できないんです
/*説明文 */を、入れてもらえるだけで助かります
891デフォルトの名無しさん:2007/06/05(火) 12:23:31
>>887
色々とダメなコードだな。
・無名の構造体は規格違反
・unionに代入した型と違う型で参照するのは(厳密には)未定義。
・これで充分。
short encode(short value) {
return ((value >> 8) & 0xff) | value << 8;
}
892デフォルトの名無しさん:2007/06/05(火) 12:29:56
>>885 の問題は前スレ495
ttp://pc11.2ch.net/test/read.cgi/tech/1179025919/495
コピペっとく
 |下記@Aの銀行に「一億円」を預けた場合、何年と何ヵ月後にAの銀行の預金額を@の銀行の預金額が超えるか
 |@利率0.08% (複利)の銀行
 |A利率0.09% (単利)の銀行
 |反復文を用いて@A双方の毎月の預金額を表示し、Aの銀行の預金
 |額を@の銀行の預金額を超えた時点で反復文を終了後、「@の銀行は
 |●年●ヵ月後にAの銀行の預金額を超える」と表示しなさい。

 |また、上記@の銀行に「1億円」、Aの銀行に「9999万円」を預けた場合、
 |どちらが先に「1億200万円」になるか、前問と同じ処理を行い、最後に
 |「●の銀行が●年●ヵ月後に先に1億200万円貯まる」と表示しなさい。

 |[3] 環境
 | [3.1] OS: WindowsXP
 | [3.2] visual studio2005
 | [3.3] 言語: C++
893デフォルトの名無しさん:2007/06/05(火) 12:35:58
>>891
問題文でunion使えって書いてあるから使ったんじゃねえの?
894デフォルトの名無しさん:2007/06/05(火) 12:36:02
>>884 を書いた後で
>>881 に共用体を使えとあったのに気づいて >>887 を書いた

無名の構造体がダメならこれでいいかな?
short encode(short value){
    union{
        short value;
        char b[2];
    }a;
    char temp;
    a.value=value;
    temp=a.b[0];
    a.b[0]=a.b[1];
    a.b[1]=temp;
    return a.value;
}
895デフォルトの名無しさん:2007/06/05(火) 12:43:20
>>885
利率が100倍になってる 0.08% ならコンストラクタに 0.0008 を渡す
それと>>885のソースコードでは利率を年利率として計算している
手計算の方法では利率を月利率として計算している rate = r /12 を rate = r に変更

くらいかな?
896891:2007/06/05(火) 12:49:03
>>894
失敬、問題文が悪かったんだね。
897デフォルトの名無しさん:2007/06/05(火) 12:52:01
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
0以下1以上の一様実数乱数をUiとする。
それを次式に代入することによって、標準正規乱数Xとなる。
X=U1+U2+…U12−6

@:前述の式のXを100個発生させよ。
A:@で求めたXを次式のように変換したYについて同様に100個発生させよ。
Y=30X+100

@とAの出力結果がそれぞれ分かるように作ってくれると助かります。

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: borland
 [3.3] 言語: C
[4] 期限: 2007年06月06日23:00まで
[5] その他の制限: なし

よろしくおねがいしますm(__)m
898デフォルトの名無しさん:2007/06/05(火) 12:53:35
>>897
> 0以下1以上の一様実数乱数をUiとする。
無理
899デフォルトの名無しさん:2007/06/05(火) 12:58:28
>>895
利息計算って、よくわからんのだが、
普通は利率って年利率表示なんでは。
ただ、複利を月単位で計算する場合って、
単利と同様に計算して、一年たったら元本に利息分を足すみたいな
やりかたになるんでないの。
まー>>885がどう計算したのか説明すんのが一番早いけどな。
900デフォルトの名無しさん:2007/06/05(火) 13:20:31
>>897
すいません。0以上1以下の一様実数乱数をUiとする。です。
901デフォルトの名無しさん:2007/06/05(火) 13:38:50
>>897
#include <stdio.h>
#include <stdlib.h>

double rand_u(void){
    return (double)rand()/(RAND_MAX-1);
}

double rand_x(void){
    double x=-6.0;
    int i;
    for(i=0;i<12;i++)
        x+=rand_u();
    return x;
}

int main(void){
    int i;
    double x, y;
    for(i=0;i<100;i++){
        x=rand_x();
        y=30*x+100;
        printf("x=%f y=%f\n", x, y);
    }
    return 0;
}
902デフォルトの名無しさん:2007/06/05(火) 14:12:34
ごめ >>901 の RAND_MAX-1 の -1 いらね
903デフォルトの名無しさん:2007/06/05(火) 14:14:58
え、俺は欲しい、ちょうだい
904デフォルトの名無しさん:2007/06/05(火) 14:20:39
>>897
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define E_MAX 100

double GetRandom(double min, double max) {
return min + (double)(rand()*(max-min)/RAND_MAX);
}

int main(void) {
double x[E_MAX],y[E_MAX];
int i,j;
srand((unsigned)time(NULL));
for(i=0; i<E_MAX; i++) {
x[i]=0.0;
y[i]=0.0;
for(j=1; j<=12; j++) {
x[i] += GetRandom(0.0 , 1.0);
}
x[i] -= 6.0;
y[i] = 30.0*x[i]+100.0;
printf("x[%d] : %lf / y[%d] : %lf \n",i+1,x[i],i+1,y[i]);
}
return 0;
}
905デフォルトの名無しさん:2007/06/05(火) 14:21:41
>>901
ありがとうございます!助かりました
906デフォルトの名無しさん:2007/06/05(火) 14:26:48
>>904
ありがとうございます!助かりました
907デフォルトの名無しさん:2007/06/05(火) 14:27:14
>>905 乱数で算出したとは言え、毎回同じ結果で良いのか?
908デフォルトの名無しさん:2007/06/05(火) 16:16:09
[1] 授業単元:
[2] 問題文(含コード&リンク):
  100×100の画像A,Bを読み込み、それぞれを10×100の縦長の画像10枚に分割して左から交互に並べた画像Cを作るプログラムを作成せよ。
   http://vista.jeez.jp/img/vi8102756700.png
    ↑の画像のような感じでお願いします
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 今週中
[5] その他の制限:特になし

説明下手で申し訳ありません、よろしくお願いいたします。
909デフォルトの名無しさん:2007/06/05(火) 16:17:30
>>908 画像の形式は?その画像の形式の仕様についての説明とかは?
910908:2007/06/05(火) 17:23:26
すいません。
一応bmpでお願いします。
911デフォルトの名無しさん:2007/06/05(火) 17:26:28
>>910
Winでgccってことだけど、bmpを読むライブラリは何を使うの?
まさかそこから全部書けとでも?
912デフォルトの名無しさん:2007/06/05(火) 17:57:25
別に書いたとて問題はないだろ。
手に負えないなら引っ込んでろ。
913デフォルトの名無しさん:2007/06/05(火) 17:58:04
>>907
そこのところは何も言われたないので、大丈夫です
914デフォルトの名無しさん:2007/06/05(火) 18:03:38
>>912
そんな毛の無いことはしたくないだけさ。
915デフォルトの名無しさん:2007/06/05(火) 18:04:21
916デフォルトの名無しさん:2007/06/05(火) 18:07:58
Color space (1bpp 8bpp 16bpp 24bpp 32bpp) と RLE圧縮/非圧縮
これ全部サポートしようとすると、かなりまんどくさくね?
917デフォルトの名無しさん:2007/06/05(火) 18:21:51
>  [3.1] OS:XP
マンドクセーんならWindows API使えばいいべよ
918デフォルトの名無しさん:2007/06/05(火) 18:27:32
RLEは無視
BITMAPINFOHEADER以外のヘッダも無視でいいだろ
残るは色数をどこまで対応するかということだけ
919デフォルトの名無しさん:2007/06/05(火) 18:45:01
gccでAPIを使うってのもなかなかなんだけどね。
920デフォルトの名無しさん:2007/06/05(火) 19:02:14
>>919
別に普通に使えるでしょ
921デフォルトの名無しさん:2007/06/05(火) 19:22:15
[1] 授業単元: コンピュータグラフィックス
[2] 問題文(含コード&リンク):

「惑星を地軸の傾き一定で公転させるプログラム 」

学校の課題で、C言語でOpenGLを用いて、
惑星を太陽を中心に公転させるプログラムを作成せよ、と出たのですが…
教科書付属のサンプルプログラムなどを改良して、
ただ太陽の周りを回転させるだけなら出来そうなのですが、
そのとき、どうしても惑星の地軸まで反転してしまいます。
地軸の傾き方向を一定に太陽の周りを公転させるには、
一体どういった考え方をすればよいのでしょうか…

判りづらい質問ですみません!
まだ具体的にプログラムを作成していないので、ソースの記載は出来ませんが、
とりあえず考え方が全く思いつかないので、
何かありましたら、アドバイスをお願いします…!!

[3] 環境
 [3.1] OS: Windows XP/Linux
 [3.2] コンパイラ名とバージョン: gcc、 Visual C++ 6.0
 [3.3] 言語:どちらでも可
[4] 期限: 2007/6/10
[5] その他の制限: 特になし
922デフォルトの名無しさん:2007/06/05(火) 19:55:21
>>921
同じ質問を見たな
923デフォルトの名無しさん:2007/06/05(火) 20:06:21
自転が作れないってこと?
924デフォルトの名無しさん:2007/06/05(火) 20:11:15
>922
まじですか!
同じ授業取ってる人かも…;気まずい…
どこで見たか覚えてらっしゃったら教えてください!
回答あったらいいな…

>923
軸を中心に自転させるのは出来るのですが、
太陽中心に回転させると、
元いた位置から反対の位置に来たときに、軸も反転したりするのです!
925デフォルトの名無しさん:2007/06/05(火) 20:16:27
公転時についでに地軸も回しちまってるんでねーの?
地球重心と地球極表面点の両方を matrix 演算で回転→公転させたつもり
じゃだめ
公転結果としての位置は、地球重心のみを回転 地軸は後から向き付けする
926デフォルトの名無しさん:2007/06/05(火) 20:22:17
つか回転マトリックスで公転しようとしてるだろ?
平行移動だけで地球を動かせばおけじゃん
927921:2007/06/05(火) 21:04:50
>925
>926
回答ありがとうございます!

地球を自転させながら公転させたいのですが、
自転している地球を公転させたら、地軸が反転するので自転もおかしくなります。
地球と地軸を切り離して考えたら、
自転させられなくなってしまうのではないでしょうか?

あと自転している地球を平行移動させる、というのは…
いったいどのようにすれば…;;
確かに地球を見ると、平行移動すればいいように思えますが…
この場合の地球の動きは、回転しているのと違うのでしょうか…
なんかいろいろ判ってないみたいですみません…;д;
928デフォルトの名無しさん:2007/06/05(火) 21:15:27
>>927
3Dグラフィックスはまだ勉強中だからよく知らんが、
地球を平行移動させて公転させた後、その場で地軸中心で回転させることで自転させりゃいいんじゃないのか?
929921:2007/06/05(火) 21:20:43
あ!すみません!
なんか出来ました!!

>926さんの言うとおりに、平行移動でloopさせることによって出来ました!
ありがとうございました^▽^!!
930デフォルトの名無しさん:2007/06/05(火) 21:24:06
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):data[] = {27,93,20,11,45,23,42,56,42,94}を挿入整列および、クイックソートで整列する際、
どのようにデータの入れ替えが行われるか、配列の内容の変化を示す事によって、
データの入れ替え過程を示しなさい。アルゴリズムの特徴がわかるようにそれぞれの
アルゴリズムの説明とともにデータの入れ替え過程を示す事。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年06月06日23:00まで

お願いします。
[5] その他の制限: なし
931デフォルトの名無しさん:2007/06/05(火) 21:28:42
glRotate で回すな
半径と角度から自前で計算して(円軌道のモデルなら) glTranslate で動かせ


O    O太陽 ↑地球と地軸

glRotate で回す .... O→ のように投影される
glTranslate で動かす ... O↑ のように投影される
932デフォルトの名無しさん:2007/06/05(火) 22:00:49

[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4159.txt
[3] 環境
 [3.1] OS: (Windows/Linux/等々) Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6月6日 15:00
[5] その他の制限: 特になし

よろしくお願いします
933デフォルトの名無しさん:2007/06/05(火) 22:03:47
>>932
方向線上リストってなに?
934デフォルトの名無しさん:2007/06/05(火) 22:25:59
>>921,924
まったく同じ文でよく言うよ
http://okwave.jp/qa3059281.html
935デフォルトの名無しさん:2007/06/05(火) 22:29:40
936932:2007/06/05(火) 22:41:33
問題はスタックを作るだけみたいなもので
下のプログラムを少し変える・追加だけ だと聞いたのですが
それが分からなくて質問させてもらいました・・
937デフォルトの名無しさん:2007/06/05(火) 22:45:41
>>932
方向線上リストとか。

激しくエスパーだが「単方向線形リスト」のことじゃないか?
授業で構造体とポインタを勉強した直後なら濃厚な気がするけど。
938デフォルトの名無しさん:2007/06/05(火) 22:53:08
>>932
リストなのにスタックで???
回答は>>935でOKっぽいね。

リストならキューのほうが自然な気がするけどな。
939デフォルトの名無しさん:2007/06/05(火) 22:57:43
>>938
まぁ最大数の制限を外すって目的なら、特に自然とも不自然ともないと思う
940デフォルトの名無しさん:2007/06/05(火) 23:06:49
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4163.txt
こんなの?
ちゃんと動くかわからんけど
941デフォルトの名無しさん:2007/06/05(火) 23:10:01
>>940
せっかく書いたもんの隅つつくようで悪いんだけど、
lastもったないほうがいいんじゃね?単方向ってんなら。
last持つなら次と前もって双方向にしたほうが・・・ってなりそう。

あと、stdio.hとstdlib,hが""なのはいやがらせ?w
942デフォルトの名無しさん:2007/06/05(火) 23:17:07
>>941
あー単方向じゃなきゃだめなのか

>あと、stdio.hとstdlib,hが""なのはいやがらせ?w
C久々だから忘れてた・・・
""はカレントを探す方か
943デフォルトの名無しさん:2007/06/05(火) 23:27:37
ダメってこた無いだろうけどリストの先頭に積む方が楽じゃない?
概要だけ書くと
tmp = malloc();
tmp->next = top
top = tmp;
みたいな。

外す時は
tmp=top;
top=top->next;
free(tmp);
か?
944デフォルトの名無しさん:2007/06/05(火) 23:35:57
あーなるほど・・・
多分課題の趣旨はそれかもな
最後に積んじゃうとかなり無駄な処理になっちゃう
945デフォルトの名無しさん:2007/06/05(火) 23:40:44
[1] 授業単元:c言語
[2] 問題文(含コード&リンク):二つ以上の空白を一つの空白に置き換えながら、入力を出力に複写するプログラムを書け
[3] 環境
 [3.1] OS: (Windows/Linux/等々) ウィンドウズXP
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)Borland C++ Compiler 5.5
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)c言語
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)無期限
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)変数、for文、while文、switch文、if文まで習った

頑張って考えてこうなりました。問題点やここはこうした方がいい、ここはダメってなのがあったら教えてください。

#include <stdio.h>
main(void)
{
int c,count=0;

while ((c = getchar()) != EOF){
if (c == ' '){
count++;
if(count == 2){
putchar(c);
}
}else{
putchar(c);
count = 0;
}
}
return 0;
}
946デフォルトの名無しさん:2007/06/05(火) 23:45:29
>>945
#include <stdio.h>
int main(void)
{
int c,count=0;

while ((c = getchar()) != EOF){
if (c == ' '){
count++;
}else{
if(count>0) putchar(' ');
count=0;
putchar(c);
}
}
return 0;
}
最後がスペースだと出力しない気もするけど、キニシナイ
947デフォルトの名無しさん:2007/06/05(火) 23:45:38
>>945
それだと、空白が単独で一個だけあるとき消されてしまう。
count == 2のところはcount == 1とするべきだと思う。
948945:2007/06/05(火) 23:50:26
>>946
>>947
本当だ、ありがとうございます!
頑張って精進します
949デフォルトの名無しさん:2007/06/05(火) 23:55:21
>>947
#include <stdio.h>
int main(void)
{
int c = 0;
int sp = 0;

while ( (c = getchar( ) ) != EOF ) {
if ( c == ' ' ) {
if ( sp != 1 ) {
putchar( c );
}
sp = 1;
}
else {
sp = 0;
putchar( c );
}
}
return 0;
}


最後のスペースで問題ないようにしてみた。
ついでに、カウンタのオーバーフローにt(ry
950デフォルトの名無しさん:2007/06/05(火) 23:57:54
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
問題文 http://www.vipper.org/vip524340.txt
データ http://www.vipper.org/vip524342.txt
途中 http://www.vipper.org/vip524344.c
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: C
[4] 期限: (2007年6月12日16:00まで)
[5] その他の制限: 特にないですが問題文の指定通りに

何度か試してみましたがうまくいきません。
どこを直すべきでしょうか。
問題文が長いのですがすみませんがよろしくお願いします。
951デフォルトの名無しさん:2007/06/06(水) 00:08:02
>>950
maleをcharにする。
ageの範囲のif分の羅列をif-else-ifの形にする。
以上で、OK
952デフォルトの名無しさん:2007/06/06(水) 00:08:53
>>951
すまん。
>maleをintにする
は忘れてくれ。
953デフォルトの名無しさん:2007/06/06(水) 00:09:27
maleなんて、滅入るぜ
954デフォルトの名無しさん:2007/06/06(水) 00:15:57
>>950
if (条件1) {
...
} else if (条件2) {
...
} else {
...
}
この形にする
955デフォルトの名無しさん:2007/06/06(水) 00:22:18
>>951->>954
ありがとうございます。やってみます。
956デフォルトの名無しさん:2007/06/06(水) 00:29:47
[1] 授業単元:c言語プログラミング
[2] 問題文:
xy平面上でx軸、y軸、x=10、y=10に囲まれた領域(境界含む)について考える。
標準入力から領域内に実数値の点(x1, y1)、(x2, y2)をとり、その2点を通る直線と
領域を構成している直線との交点2つを出力するプログラムを作れ。

[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:c言語
[4] 期限:6月8日 15:00まで
[5] その他の制限:特になし

よろしくお願いします。
957デフォルトの名無しさん:2007/06/06(水) 00:31:44
すべて他人まかせ
いいご身分
958デフォルトの名無しさん :2007/06/06(水) 01:06:34
手計算でなんとなく直線の式を出してみた
y= a * x + dとする

 y2 = a * x2 + d
-y1 = a * x1 + d
---------------
y2-y1 = a * ( x2 - x1)
∴a = ( y2 - y1)/(x2-x1)
∴d = y2 - (y2-y1) * x2/(x2-x1)
959デフォルトの名無しさん:2007/06/06(水) 01:13:07
プログラムって言うより算数(数学)の問題多いよな。
こういう問題は、式とかをあらかじめ算出しておいてくれると楽なのにな。
「こういう式になると思うんですが、プログラムので表現方法がわかりません」みたいな。
960デフォルトの名無しさん:2007/06/06(水) 01:14:02
工数は少ないに越したことはだろうw
(いいたいことはわかっているつもり
どっちかっつ〜と回答者にいいことがあると思う
961デフォルトの名無しさん:2007/06/06(水) 01:18:07
>>959
だよな。もちろん、プログラミングと絡んでくるような問題なら丸投げも仕方ないだろうが
プログラム抜きで出来る部分ぐらいはやっといてくれた方が楽なんだよな
962デフォルトの名無しさん:2007/06/06(水) 01:25:55
わかってくれる人がいてよかったw
>>956の問題くらいならどうにかなっても、高次曲線とか曲面とかに
なってくると、もう何年も前のことでさっぱりなんだよな。
フーリエ変換とかウェーブレット変換なんて懐かしいがさっぱりだw
数学系、プログラム得意な人が解いてくれるだろうけどたぶん
みんながそうじゃないだろうし。少なくとも俺はw
963デフォルトの名無しさん:2007/06/06(水) 01:29:51
問題:2重のfor文を使って、以下のような九九表を完成させなさい

OS:WindowsXP
コンパイラ名とバージョン:borland
言語:c言語
問題:
実行画面
  1 2 3 4 5 6 7 8 9
-------------------------------
1| 1 2 3 4 5 6 7 8 9
2| 2 4 6 8 10 12 14 16 18
3| 3 6 9 12 15 18 21 24 27
4| 4 8 12 16 20 24 28 32 36
5| 5 10 15 20 25 30 35 40 45
6| 6 12 18 24 30 36 42 48 54
7| 7 14 21 28 35 42 49 56 63
8| 8 16 24 32 40 48 56 64 72
9| 9 18 27 36 45 54 63 72 81
964デフォルトの名無しさん:2007/06/06(水) 01:36:39
>>962
実際問題として、それが必要なら普通はライブラリ使うしなw
965デフォルトの名無しさん:2007/06/06(水) 01:41:08
>963
餌がマズ過ぎゃしないか?
966デフォルトの名無しさん:2007/06/06(水) 01:42:34
>>963
#include <stdio.h>
int main(void)
{
int i, j;
for (i = 1; i <= 9; i++) {
if (i == 1) {
printf(" ");
}
printf("%3d", i);
}
printf("\n-------------------------------\n");
for (i = 1; i <= 9; i++) {
printf("%d|", i);
for (j = 1; j <= 9; j++) {
printf("%3d", i * j);
}
printf("\n");
}
return 0;
}
967デフォルトの名無しさん:2007/06/06(水) 01:43:37
>>963
こないだも同じ問題見たよorz
#include <stdio.h>

int main( void )
{
int i;
int j;

// ヘッダ部
printf( " " );
for ( i = 1; i <= 9; i++ ) {
printf( "%d " ,i );
}
printf( "\n-------------------------------\n" );

for ( i = 1; i <= 9; i++ ) {
printf( "%d|", i );
for ( j = 1; j <= 9; j++ ) {
printf( "%d ", i * j );
}
printf( "\n" );
}

return 0;
}
968965:2007/06/06(水) 01:53:37
マジだったんならごめんなさいm(__)m
969デフォルトの名無しさん:2007/06/06(水) 04:31:54
>>956 適当
#include <stdio.h>

#define X1 0.0
#define Y1 0.0
#define X2 10.0
#define Y2 10.0

int main(void)
{
    double x1, y1, x2, y2, a, b;

    scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);
    if(x1 < X1 || x1 >X2 || x2 < X1 || x2 > X2 || y1 < Y1 || y1 > Y2 || y2 < Y1 || y2 > Y2)
        return -1;

    a = (y2 - y1)/(x2 - x1);
    b = y1 - a*x1;
    if((Y1 - b)/a >= X1 && (Y1 - b)/a <= X2) printf("%f %f\n", (Y1 - b)/a, Y1);
    if((Y2 - b)/a >= X1 && (Y2 - b)/a <= X2) printf("%f %f\n", (Y2 - b)/a, Y2);
    if(a*X1 + b > Y1 && a*X1 + b < Y2) printf("%f %f\n", X1, a*X1 + b);
    if(a*X2 + b > Y1 && a*X2 + b < Y2) printf("%f %f\n", X2, a*X2 + b);

    return 0;
}
970デフォルトの名無しさん:2007/06/06(水) 04:46:23
>>956 ちょい変更
#include <stdio.h>

#define X1 0.0
#define Y1 0.0
#define X2 10.0
#define Y2 10.0

int main(void)
{
    double x1, y1, x2, y2, a, b, x, y;

    scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);
    if(x1 < X1 || x1 >X2 || x2 < X1 || x2 > X2 || y1 < Y1 || y1 > Y2 || y2 < Y1 || y2 > Y2)
        return -1;
    if(x1 == x2 && y1 == y2)
        return -2;

    if(x1 == x2){
        printf("%f %f\n", x1, Y1);
        printf("%f %f\n", x1, Y2);
    }else{
        a = (y2 - y1)/(x2 - x1);
        b = y1 - a*x1;
        if((Y1 - b)/a >= X1 && (Y1 - b)/a <= X2) printf("%f %f\n", (Y1 - b)/a, Y1);
        if((Y2 - b)/a >= X1 && (Y2 - b)/a <= X2) printf("%f %f\n", (Y2 - b)/a, Y2);
        if(a*X1 + b > Y1 && a*X1 + b < Y2) printf("%f %f\n", X1, a*X1 + b);
        if(a*X2 + b > Y1 && a*X2 + b < Y2) printf("%f %f\n", X2, a*X2 + b);
    }

    return 0;
}
971970:2007/06/06(水) 04:49:38
double x1, y1, x2, y2, a, b, x, y; を
double x1, y1, x2, y2, a, b;に……。
972958:2007/06/06(水) 05:08:08
数式書いたら意外と意見が出たな。
俺としては「数式に直したら、ほら簡単な問題でしょ?」
ってな意味をこめて数式だけ書いた。
973デフォルトの名無しさん:2007/06/06(水) 05:21:20
あげんな! ニートが!
974921:2007/06/06(水) 05:50:53
>931
遅くなりましてすみません><;
ありがとうございます!
図解までしていただいてとても明確に理解できました^^
975921:2007/06/06(水) 05:52:49
>934
あ!それ私です!;
って言うまでもないか^^;
すみません!他の板で見かけられたのかと思ってましたッ!;
976デフォルトの名無しさん:2007/06/06(水) 08:50:12 BE:397618867-2BP(12)
次スレ立てました
C/C++の宿題を片付けます 89代目
http://pc11.2ch.net/test/read.cgi/tech/1181087371/
977デフォルトの名無しさん:2007/06/06(水) 12:25:22
バックスペースが表示できません。お願いします。あと問題点、改良した方がいい点があればお願いします。

[1] 授業単元:c言語
[2] 問題文(含コード&リンク): 各タブを\t、各バックスペースを\b、各バックスラッシュを\\に置き換えながら
                   入力を出力に複写するプログラムを書け
[3] 環境
 [3.1] OS: ウィンドウズXP
 [3.2] コンパイラ名とバージョン:)Borland C++ Compiler 5.5
 [3.3] 言語: c言語
[4] 期限: 無期限
[5] その他の制限:for文、while文、switch文、if文まで習った

#include <stdio.h>
int main(void)
{
int c;

while((c = getchar()) != EOF){
if(c == '\t'){
printf("\\t");
}else if(c == '\b'){
printf("\\b");
}else if(c == '\\'){
printf("\\\\");
}else{
putchar(c);
}
}
return 0;
}
978デフォルトの名無しさん:2007/06/06(水) 12:31:10
問題文(含コード&リンク):
環境
OS: (Windows/Linux/等々)
コンパイラ名とバージョン: ボーランド
言語: C
[5] その他の制限:現在for文 if文 入力・出力・演算子
テーマ:繰り返し処理(while文)
問題:キーボードより整数nを入力し、1〜nまでの合計を求めなさい
実行画面
整数nの入力==>5
合計:15
979デフォルトの名無しさん:2007/06/06(水) 12:43:16
>>978
#include<stdio.h>
main()
{
int n,m,sum;
printf("整数nの入力==>");
scanf("%d",&n);
m=0;sum=0;
while(m<n){
sum+=++m;
}
printf("合計:%d",sum);
}
980デフォルトの名無しさん:2007/06/06(水) 12:49:47
>>979
#include <stdio.h>
int main(void)
{

int a,count,total;
count=total=0;

printf("キーボードより整数nを入力=");
scanf("%d",&a);
while(count <= a){
total += count;
count++;
}
printf("合計=%d",total);
return 0;
}
981979:2007/06/06(水) 12:55:33
>>978
>>979よりエレガントな方法を思いついたので再提出しまつ。
#include<stdio.h>
main()
{
int n,sum;
printf("整数nの入力==>");
scanf("%d",&n);
sum=0;
while(n>0)sum+=n--;
printf("合計:%d",sum);
}
982デフォルトの名無しさん:2007/06/06(水) 13:03:15
誰か>>977もお願いします
983デフォルトの名無しさん:2007/06/06(水) 13:06:21
バックスペースがわかりやすく表示されるならそれはすごいことだ。
タブや改行といった制御文字なら表示されんでもどこにあるかわかるけど
バックスペースはわからんなぁ・・・
984デフォルトの名無しさん:2007/06/06(水) 13:13:21
>>983
そうですか・・・
バックスペースを表示させろといわれても教材みても何も書いてないしどうしていいのかわからんw
985デフォルトの名無しさん:2007/06/06(水) 13:20:57
>>977
問題文の意味がよくわからんけど、getch() は使って良かったのかな?

#include <stdio.h>
#include <conio.h>
#define CTRL_D 0x04
#define CTRL_Z 0x1A
#define RETURN 0x0D
int main(void){
    int c;

    while(1){
        c = getch();
        if(c == CTRL_D || c == CTRL_Z) break;

        switch(c){
            case '\t': printf("\\t"); break;
            case '\b': printf("\\b"); break;
            case '\\': printf("\\\\"); break;
            case RETURN: printf("\n"); break;
            default: printf("%c", c);break;
        }
    }
    return 0;
}
986977:2007/06/06(水) 13:27:25
>>985
使っていいのはgetchar、scanfです
あと#include <stdio.h>のみ
getch()は習ってないです
なんか後だしですみません

問題の意味はタブを入力したら\tで画面に出力、バックスペース、バックスラッシュも同じように\bと\\と画面に出力
ようするに目に見える形で出力しないさいって意味だと思います
987デフォルトの名無しさん:2007/06/06(水) 13:35:41
っつかさぁ、習った習っていないは条件に入れるべきだろうか?
課題の本質的な問題に答えられていれば、なんら問題ないんじゃね?
988デフォルトの名無しさん:2007/06/06(水) 13:41:58
今までやった内容:if文while文for文
os:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:繰り返し処理(while文)
問題:キーボードより複数件のデータを入力し奇数と偶数の合計を計算しなさい
-1が入力されたらデータの終了とし、合計には加えない
実行画面
整数入力==>3
整数入力==>8
整数入力==>10
整数入力==>7
整数入力==>0
整数入力==>26
整数入力==>19
整数入力==>1
整数入力==>-1
奇数合計:30
偶数合計:44
989デフォルトの名無しさん:2007/06/06(水) 14:00:18
>>988
#include<stdio.h>
int main(void)
{
int input,sum_g,sum_k;
sum_g=sum_k=0;
while(1){
printf("整数入力==>");
scanf("%d",&input);
if(input==-1){
break;
}else if(input%2==0){
sum_g=sum_g+input;
}else{
sum_k=sum_k+input;
}
}
printf("奇数合計:%d\n偶数合計:%d\n",sum_k,sum_g);
return 0;
}
990デフォルトの名無しさん:2007/06/06(水) 14:25:28
>>977
プログラムに誤りは無い。
もしかしてキーボードの入力を読んでるのか?
普通の端末のモードでは、BSはそもそもプログラム側に送られないよ。
簡単に実験したければBSを含むファイルを食わせてみるんだね。
vimのようなエディタならそのようなテキストファイルを簡単に作れるが、
そのようなテキストエディタを持っていないのなら、
バイナリエディタでも使うんだね。

キーボードから入力されたBSを直接プログラム側で処理したいのならば、
端末をRAWモードにするか、Win32ConsoleAPIないしそのラッパーを
使う必要がある。どっちにしろCの標準ライブラリの範疇ではないよ。
991977:2007/06/06(水) 14:33:16
>>990
有難うございます
992 ◆lIN/ESgxWw :2007/06/06(水) 18:13:16
[1]c言語
[2]1本の道に,食べ物が多数落ちている.
ランダムに動く動物が,それらを全て食べ尽くすと終了するようなプログラムを作成せよ.

<仕様>
「道」は要素数20程度の1次元配列で表現する.
「食べ物」は,上記配列の各要素に値1があればその場所に存在し,値0であればその場所には存在しないものとする.
「動物」は,1回の移動で配列中の1つ左または1つ右に移動できる.
「動物」の訪れた場所のエサは食べられたものとする.
「道のうち食べ物のない箇所」,「道のうち食べ物のある箇所」,「動物」は,それぞれ -, *, O で表現する.それらを横一列の文字で表示する.
繰り返し処理中は,毎回数十〜数百ミリ秒程度の時間,実行を一時停止させることで,状態の推移を見やすくする.
[3]OS:Linux
コンパイラ名:スイマセン、分かりません
言語:C
[4]できれば今日中にお願いします
[5]制限:配列まで習ってます。標準ライブラリは習ってません

よろしくお願いします。
993デフォルトの名無しさん:2007/06/06(水) 19:06:32
>>992 標準ライブラリはこれから勉強すればいい
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

#define N 20

void print_road(int road[N], int animal){
    int i;
    for(i = 0; i < N; i++){
        if(i == animal) putchar('O');
        else if(road[i] == 0) putchar('-');
        else if(road[i] == 1) putchar('*');
    }
    putchar('\n');
}

int main(void){
    int road[N] = {1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0}, animal, i;
    srand((unsigned int)time(NULL));
    animal = (double)rand()/(RAND_MAX + 1)*N;
    for(i = 0; i < 1000; i++){
        animal += (int)((double)rand()/(RAND_MAX+1)*3) - 1;
        if(animal < 0) animal += N;
        else if(animal >= N) animal -= N;
        road[animal] = 0;
        print_road(road, animal);
        Sleep(100);
    }
    return 0;
}
994デフォルトの名無しさん:2007/06/06(水) 19:10:48
やべ……Linuxか……
995デフォルトの名無しさん:2007/06/06(水) 20:37:10
[1] 授業単元: C++実習
[2] 問題文(含コード&リンク):
?新しい型(設計図)として,下記の要素を含む「電車」型を設計しなさい(新しい型(設計図)は,main関数の外で記述すること)。
?次に,main関数で上記の型(設計図)の変数を1つ宣言(生成)し,その変数の要素に適当な初期値を格納しなさい。
?最後に,main関数で上記で生成した変数の要素をすべてコマンドプロンプトに出力しなさい。
?新しい型名:TRAIN
?要素1:車輪数・・・型,型名は考えること
?要素2:窓数・・・型,型名は考えること
?要素3:座席数・・・型,型名は考えること
?要素4:車内温度・・・型,型名は考えること
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] visual studio2005
 [3.3] 言語: C++
[4] 期限: 5/25まで
[5] その他の制限: 特になし

よろしくお願いします。
996デフォルトの名無しさん:2007/06/06(水) 20:37:57
>>995 間違えました期限は6月15日までです
997デフォルトの名無しさん:2007/06/06(水) 20:39:47
[1] 授業単元: C++実習
[2] 問題文(含コード&リンク):
新しい型(設計図)として,「人間」型と「動物」型を設計(新しい型(設計図)は,main関数の外で記述すること,要素は適時考えること)し,
main関数で上記の型(設計図)の変数を配列で2つづつ宣言(生成)した後,その変数の要素に適当な初期値を格納しなさい。
最後に,main関数で上記で生成した変数の要素をすべてコマンドプロンプトに出力しなさい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] visual studio2005
 [3.3] 言語: C++
[4] 期限: 6/15まで
[5] その他の制限: 特になし

よろしくお願いします。
998デフォルトの名無しさん:2007/06/06(水) 20:52:06
>>997
人間の定義ぷりーず
プログラムじゃなくていいから
999デフォルトの名無しさん:2007/06/06(水) 20:54:07
人間、この非人間的なるもの
1000デフォルトの名無しさん:2007/06/06(水) 21:00:58
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。