C/C++の宿題を片づけます 50代目

このエントリーをはてなブックマークに追加
1名無しさん@そうだ選挙に行こう

あなたが解けないC/C++の宿題を片づけます

――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
―――――――――――――――――――――――――――――――

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: Windows/Linux/等々
 [3.2] コンパイラ名とバージョン: gcc 2.9 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

【前スレ】
49代目: http://pc8.2ch.net/test/read.cgi/tech/1123661447/
2名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:10:01
3名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:10:36
4名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:11:45
5名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:12:29
6名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:18:21
質問いいですか?
C言語の宿題で、フローチャートと同じプログラムを組んでこいと
言われたのですが、その中に
「〜コードをキーとして、〜ファイルを読む」というのが□(処理ですよね)
で囲んでありました。
C言語で「」の処理を1文で出来るものがありましたら、教えてください。
自分ではwhileで繰り返す方法以外分かりませんでした。
7名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:21:58
>>1のテンプレに従ってください。また、問題は全文書くよう、お願いします。
8名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:31:09
>>6
COBOLみたいな問題だなwwwww
9名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:34:28
〜コードとは何ぞや?
10名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:42:33
>>6
1文でやれという宿題じゃないだろ?
11名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:42:56
>>7
申し訳ない。

[1] 授業単元: C演習
[2] 問題文(含コード&リンク): ごめんなさい。文は上記の通りです。
渡されたプリントにフローチャートが書いてあって、その通りに作ってこいと。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:VC6.0
言語: C
[4] 期限: 今月の12日まで
[5] その他の制限: 特になし。とにかくその通り動けばいいとのこと。

>>9
ごめんなさい。書き方が悪かったです。
出庫先商品別売り上げ月報ファイルというのを作るんですが、
その渡されたフローチャートに
「T_出庫先コードをキーとして、出庫先マスタファイルを読む」と書いてありました。
コードは数字です。
12名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:48:23
>>11
whileで繰り返せ。
13名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:50:50
配列
14名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:54:18
フローチャートとファイルフォーマット、使える関数がわからんと、どうしようもないが。
たぶん1文では無理。

一応↓も1文だけど。
while (fscanf(fp ... ) == ...) if (code == ...) val1 = ... , val2 = ... ;

15名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:57:34
6です。
みなさんありがとうございました。
while文を使ってがんばってみようかと思います。
遅くに本当にありがとうございます。
16名無しさん@そうだ選挙に行こう:2005/09/10(土) 23:24:17
...データベース使えっちゅーことでは?
17名無しさん@そうだ選挙に行こう:2005/09/11(日) 12:02:23
C/C++言語スレよりも「教え方スレ」のほうが有益な気が…
既に何回か話題になっているが。
18名無しさん@そうだ選挙に行こう:2005/09/11(日) 13:26:37
どのスレのことか、分からなかったです。できたら、誘導してください。>17
19名無しさん@そうだ選挙に行こう:2005/09/11(日) 13:40:25
よろしくお願いします。

shell32.dllを書き換える方法がわかりません。
環境は、WindowsXP Home Editionを使用しています。

WFP(システムファイル保護)の為、shell32.dllを書き換える事が出来ません。
この方法さえわかれば、なんとか出来るのですが...

取り敢えず、試した方法として、
レジストリのRunOnceにブチ込んで、起動時に書き換える >> 既に使用中の為失敗

C:/WINDOWS/dllcache/以下を削除してキャッシュを削除後、ファイル入れ替え
>> 入れ替えは成功しますが、"システムファイルに変更がありました""Windows Install CD"をドライブに挿入して下さい、等のメッセージが、つらつらと。

そのダイアログを表示させずに入れ替えてしまう方法は無いものでしょうか。
どうぞ、よろしくお願いします。
20名無しさん@そうだ選挙に行こう:2005/09/11(日) 13:42:02
ありません。
21名無しさん@そうだ選挙に行こう:2005/09/11(日) 13:48:32
>19
これって宿題?
というか、プログラミングの内容じゃないし、激しくスレ違いな予感。
聞くならWindows板へどうぞ。
ここのWindows関連スレや質問スレでも答えてくれるかもしれないけど。
まあ、何にしてもシステムファイルを無闇にいじるものじゃない。
22名無しさん@そうだ選挙に行こう:2005/09/11(日) 13:51:09
えっと一言
>1
2319:2005/09/11(日) 14:01:33
いや...セーフモードで起動して、手動でファイルを書き換える事は可能なんです。
そこを、C++を使って、セーフモードで起動しなくとも、
せめて、ダイアログのボタンを押すだけ、その後、再起動一発でシステムファイルを書き換える術を知りたくて。
24名無しさん@そうだ選挙に行こう:2005/09/11(日) 14:21:59
どうも先生の出題ミスのような気がするから
もう一度先生に問題を聞き直した方がいいよ。
25名無しさん@そうだ選挙に行こう:2005/09/11(日) 14:42:32
どう考えても宿題じゃないし、スレ違いな気がするのだが。
>>23
C++でやるなら、Win32 APIを使って
・ダイアログのボタンを押す → FindWindow()+PostMessage()
・再起動(ry → ExitWindowEx()
できるかどうかは知らん。
他に思いつくのはキーボードマクロ+バッチファイル(orWSH)くらい。

後は該当スレへどうぞ。ここには来なくていいから。
26名無しさん@そうだ選挙に行こう:2005/09/11(日) 15:13:59
[1] 授業単元:windowsプログラミング
[2] 問題文(含コード&リンク):windowsで動くゲームを作る
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: BCC
 [3.3] 言語: C++しか知らないでつ
[4] 期限:今日中
[5] その他の制限: テトリスを作るぐらいの知能はあります。
           しかし、おいらは【迷路】を作りたいと思っています
           スタートからゴールまで適当なキャラが十字キーで
           移動できて、時間制限をつくり、最後にランキング的
           なものが表示されるような迷路にしたいと思います。
           できれば、高クオリティ高品質なものを・・・・
           
27名無しさん@そうだ選挙に行こう:2005/09/11(日) 15:15:54
>>all ネタはスルーで。
28名無しさん@そうだ選挙に行こう:2005/09/11(日) 15:18:15
>>26
時間無いならテトリスでもいいじゃん。

クオリティ高いのを作りたいって気持ちはわかるが、
それと納期を天秤にかけてよく考えてみ。
つか、GUIを1から作って今日中は無理。
29名無しさん@そうだ選挙に行こう:2005/09/11(日) 15:21:24
レベルに合わせて作ってみよう。ってことで、テトリス、アップローダーに置いといて。
今日中って具体的な時間がわからんが、暇なんで朝までにはできる・・・かな。
3026:2005/09/11(日) 15:21:59
とりあえず期限に間に合えばいいです
>>28
そこをなんとかw
31名無しさん@そうだ選挙に行こう:2005/09/11(日) 15:22:17
描画、入力、ロジック、をうまく切り離して作れば、
テトリスも迷路も大差ないんだがな。
32名無しさん@そうだ選挙に行こう:2005/09/11(日) 15:25:25
3326:2005/09/11(日) 15:28:48
http://up.isp.2ch.net/up/ecca3cc13362.zip
これをつくるのに1週間ほどかかりました
3426:2005/09/11(日) 15:35:05
>>32
そのサイトのシンプルダンジョンみたいなのがいいですね・・・
これってソースはないんでしょうか?
35名無しさん@そうだ選挙に行こう:2005/09/11(日) 15:39:33
>>34
まさかそのソースをそのまま提出する気じゃないよな・・・?w
3626:2005/09/11(日) 15:40:14
と、とんでもない(汗
参考ですよ、あくまでも参考。
37名無しさん@そうだ選挙に行こう:2005/09/11(日) 15:49:45
38名無しさん@そうだ選挙に行こう:2005/09/11(日) 15:55:23
>>26
あふぉかぶぁかかと。
3926:2005/09/11(日) 16:13:28
>>37
ありがとうござます〜
これ見て自分で頑張ってみます。
あつかましいですがソースは何とかならないでしょうか?
40名無しさん@そうだ選挙に行こう:2005/09/11(日) 16:15:04
>>39
ハァ?自分で頑張るんだろ?
41名無しさん@そうだ選挙に行こう:2005/09/11(日) 16:17:23
漏れが作った迷路ソフトでよければソースメールするからメアド晒してよ。
ただし、N88-BASIC(86)とかDISK-BASICとか、精々C w/Motif しかないけど。
4226:2005/09/11(日) 16:23:07
>>41
N88-BASIC(86)とかDISK-BASICっていう言語ですか?
GUIかC++でないといけないんですが・・・
43名無しさん@そうだ選挙に行こう:2005/09/11(日) 16:30:14
>26
>>41は釣りだからやめとけw
つか、ゆとり世代は2chでのメアド晒しに危機感を感じないのか・・・
4426:2005/09/11(日) 16:31:28
ステアドならいいかなと思っていた頃が私にもありました。
45名無しさん@そうだ選挙に行こう:2005/09/11(日) 16:44:04
>>26
あのな、「GUIかC++か」、っていうお前の一文はな、
「windowsかコンピュータか」、っていうのと同義なの。。
4626:2005/09/11(日) 16:46:37
>>45
あざーす
47名無しさん@そうだ選挙に行こう:2005/09/11(日) 16:54:27
前スレの952=963はいないのかな?
質問投げても返答無いし。

>>26
ここに書き込んでる暇があったらソース書けよw
48名無しさん@そうだ選挙に行こう:2005/09/11(日) 17:01:00
>テトリス
いちおう、望んでるレベルが分かったのでなんとか。
Windowに文字を書くだけでいい、ほぼコンソールなプログラムだな。
ハイスコアうんぬんがあるんで、ちょっと手間が・・・ああ・・・メッセージボックスで代用でいいか。
まあ、朝までにやっとくよ。
4949代目952改定版:2005/09/11(日) 18:31:08
[1] 授業単元: プログラミング宿題
[2] 問題文(含コード&リンク): 下記に記載
[3] 環境
 [3.1] OS: Windows2000
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C言語でお願いします。
[4] 期限: [2005年09月11日23:59ぐらいまで]
[5] その他の制限: C言語2ヶ月ぐらい勉強、下記に記載

出力フォーマットからしたの1回目と2回目を出力してほしいです
選挙は行って来ました!
$以外は固定出力文字。
構造体の変数にはなにかしらの値が入ってます。(可変)
$を構造体のコメント文の変数にあわせて出力してください。
みなさんよろしくお願いします。
50名無しさん@そうだ選挙に行こう:2005/09/11(日) 18:40:05
>>49
は?
51名無しさん@そうだ選挙に行こう:2005/09/11(日) 18:41:36
>>49
意味わかんない。終了。
52名無しさん@そうだ選挙に行こう:2005/09/11(日) 18:43:06
こうして、残りわずかな作業時間を、無駄に消費してゆくわけだな。
53名無しさん@そうだ選挙に行こう:2005/09/11(日) 18:49:37
輝かしき前スレ952の依頼履歴


952 名前:名無しさん@そうだ選挙に行こう[] 投稿日:2005/09/11(日) 10:09:17
[1] 授業単元: プログラミング宿題
[2] 問題文(含コード&リンク): 下記に記載
[3] 環境
 [3.1] OS: Windows2000
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C言語でお願いします。
[4] 期限: [2005年09月11日17:00ぐらいまで]
[5] その他の制限: C言語2ヶ月ぐらい勉強、下記に記載

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/912.txt


963 名前:952[] 投稿日:2005/09/11(日) 12:50:39
みなさんすみません、構造体の変数の中にはなんかしら値がはいり(可変)、
コメント文に$3とか$4とか$5の書いてある変数にあわせて出力する。
あとお約束を知らなくてすみません。今度は返します!!
これでわかりますか?


頼むから前スレの>>967>>968を読んでくれ
54名無しさん@そうだ選挙に行こう:2005/09/11(日) 19:16:04
・・・2ヶ月・・・7月からプログラミングか、職業訓練校かなんかかなぁ。
選挙にいける年齢なのだから、もうちょっと考えような。
55名無しさん@そうだ選挙に行こう:2005/09/11(日) 20:32:39
ネタをきっちりと遊んでるオマエらステキ。
56名無しさん@そうだ選挙に行こう:2005/09/11(日) 20:55:40
>>49
頼むから↓に反応してくれ。
特に968の方。

−−− ここから −−−−−−−−−−−−

 967 名前:名無しさん@そうだ選挙に行こう 投稿日:2005/09/11(日) 13:00
 >>963
 煽りじゃなくってさっぱり分からん

 もう時間ないんだろ?もちついて何すればいいのか教えてくれ
 課題の問題文丸ごとコピペの方がいいかもな


 968 名前:名無しさん@そうだ選挙に行こう 投稿日:2005/09/11(日) 13:08
 はぁ・・・俺はESP対策班ではないのだが。

 >>963
 とりあえずいくつか質問
 1) このプログラムは何をするプログラム?
 2) 最終的にprintfの羅列に合わせて結果を出力するようにすればOK?
 3) $3とか$4とかの内容はどうやって取得or計算する?
 4) 中でCSVファイルを読み込むみたいだけど、その内容は?
 5) C言語なのに構造体メンバにCString(C++クラス)が入っててもOK?

 つか、>>967の言う通り問題をそのまま貼った方が早いかも。
−−− ここまで −−−−−−−−−−−−
57名無しさん@そうだ選挙に行こう:2005/09/11(日) 20:59:00
ここでの解決をあきらめたんじゃね?
58662:2005/09/11(日) 21:11:51
[1] 授業単元:C演習
[2] 問題文(含コード&リンク):文字列と削除文字列を入力し、文字列の中から削除文字列を削除。
使用する標準関数:strncmp()、strcpy()、strlen等。
[3] 環境
 [3.1]OS:Windows
 [3.2]コンパイラ名とバージョン:BCC
[3.3]言語:C
[4] 期限:明日の午前頃まで。
[5] その他の制限:

お願いします。
59名無しさん@そうだ選挙に行こう:2005/09/11(日) 21:16:19
>58
・インターフェース(関数プロトタイプ)
・文字列"ABCBA"、削除文字列"AB"の時の動作
・文字列"ABABA"、削除文字列"ABA"の時の動作
を教えてくれ。
60名無しさん@そうだ選挙に行こう:2005/09/11(日) 21:22:09
>59
はぁ?
ABCBA から AB 消し -> CBA
だろが?

そんな事より、 >58 よ
ABCBCA から BC を消すとき AA とすんの?
61662:2005/09/11(日) 21:25:49
>>60
AAとするでお願いします。
62名無しさん@そうだ選挙に行こう:2005/09/11(日) 21:27:45
ABBCCAみたいなときは?
63名無しさん@そうだ選挙に行こう:2005/09/11(日) 21:30:03
まあ感情的になるなよ。
特定の文字を削除ということもあるからな。それかどうか確認したかったわけだ。
文字列とは書いてあるが、えすぱーせにゃならんからな。
64名無しさん@そうだ選挙に行こう:2005/09/11(日) 21:30:15
CAAABBBC から AB のときは CC にしていいのか?
65名無しさん@そうだ選挙に行こう:2005/09/11(日) 21:31:44
strncmpがあるから、文字での削除ってのは、ないと思うよん。
66名無しさん@そうだ選挙に行こう:2005/09/11(日) 21:37:58
オマエら作ってやれよ。
67662:2005/09/11(日) 21:38:50
>>64
CAAABBBCからABのときはCAABBCとなるようにお願いします。

載っている実行の例です。
文字列:ABCDEFAABCDABC
削除文字列:ABC
結果:DEFAD
68名無しさん@そうだ選挙に行こう:2005/09/11(日) 21:56:03
結構難しいなー
strncmpを使うってことは文字列の単純比較で検索するってことだろ
でもそうするとstrcpyの使い場所が無いなー
69名無しさん@そうだ選挙に行こう:2005/09/11(日) 21:56:12
後から問題付け足すなボケ
例があるなら何故最初から出さない?あぁ?
70名無しさん@そうだ選挙に行こう:2005/09/11(日) 21:56:38
できたけど載せない
71名無しさん@そうだ選挙に行こう:2005/09/11(日) 21:59:31
>>68
別に必ず使えというわけではないのではないだろうか。
72名無しさん@そうだ選挙に行こう:2005/09/11(日) 22:00:24
荒れとるなー。
概要だが。
char *from, *to, *skipstr;
size_t len;

while (*from) {
if (strncmp(from, skipstr, len) == ) {
from += len;
} else {
*to++ = *from++;
}
あ、たしかにないな・・・strcpy()
73名無しさん@そうだ選挙に行こう:2005/09/11(日) 22:01:10
こんな感じかな?
#include<string.h>
char*strremove(char*str,char*remove_str){
    size_t remove_str_len = strlen(remove_str);
    char*i=str,*j=str;
    if(remove_str_len)do
        while(!strncmp(j,remove_str,remove_str_len))j += remove_str_len;
    while(*i++=*j++);
    return str;
}
#include<stdio.h>
int main(){
    char source[80],remove[80];
    printf("文字列:");scanf("%s",source);
    printf("削除文字列:");scanf("%s",remove);
    printf("結果:%s",strremove(source,remove));
}
74名無しさん@そうだ選挙に行こう:2005/09/11(日) 22:01:42
ただし、円周率は3とする・・・みたいなもんか>71
75名無しさん@そうだ選挙に行こう:2005/09/11(日) 22:02:19
全然違うだろ。
76名無しさん@そうだ選挙に行こう:2005/09/11(日) 22:02:54
>>73
ツメツメなコーディングスタイルだなー
7749代目952改定版:2005/09/11(日) 22:04:51
>>56
1) このプログラムは何をするプログラム?
ただ構造体の変数をつかって$に合わせて表示するだけのプログラムです

2) 最終的にprintfの羅列に合わせて結果を出力するようにすればOK?
OKです

3) $3とか$4とかの内容はどうやって取得or計算する?
$には値が入ってると思ってください。あとで適当に数値を入れます。

4) 中でCSVファイルを読み込むみたいだけど、その内容は?
これも適当に値が入ってます。

5) C言語なのに構造体メンバにCString(C++クラス)が入っててもOK?
Cって言ってたんですけどならべくCでってことなのでC++を使ってもいいです。
7849代目952改定版:2005/09/11(日) 22:09:31
すみませんが再度載せます。出力例を載せました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/915.txt
よろしくお願いします。
79名無しさん@そうだ選挙に行こう:2005/09/11(日) 22:10:07
>>77の知人と>>77の会話能力等について語り合ってみたい
80名無しさん@そうだ選挙に行こう:2005/09/11(日) 22:13:58
>>79
漏れも本物のエスパーに会ってみたい
81名無しさん@そうだ選挙に行こう:2005/09/11(日) 22:14:47
>>77
ニーーーート
82名無しさん@そうだ選挙に行こう:2005/09/11(日) 22:14:57
数年前はバッグに入ってた記憶がある
83名無しさん@そうだ選挙に行こう:2005/09/11(日) 22:21:55
去年か一昨年くらいだったか、うちの文化祭に来てた希ガス
84デフォルトの名無しさん:2005/09/11(日) 22:24:07
これ参考で入力順と逆に表示するプログラムお願いします。
#include <stdio.h> #include <stdlib.h> #include <string.h>
struct MJlist {
char name [20]; int homerun;
struct MJlist *pointer; };
int main (void) {
struct MJlist *head = NULL, *tail = NULL, *temp;
char name[256]; int homer;
for (; ; ) {
printf("batter?:"); scanf("%255s", name); if (!strcmp(name, "end")) break;
printf("homer?:"); scanf("%d", &homer);
temp = (struct MJlist*)malloc(sizeof(struct MJlist));
strcpy(temp->name, name);
temp->homerun = homer; temp->pointer = NULL;
if (head != NULL) tail->pointer = temp; else head = temp;
tail = temp; }
temp = head;
while (temp != NULL) {
printf("batter:%s, homer:%d\n", temp->name, temp->homerun);
temp = temp->pointer; }
while (head != NULL) {
temp = head; head = head->pointer;
free(temp); }
return 0; }
85名無しさん@そうだ選挙に行こう:2005/09/11(日) 22:27:29
ああっ!今わかったぞ!
>>77はESPを利用したプログラミングか何かを研究してる期間のエージェントで
わざとエスパーにしか解けないような出題をして本物がかかってくるのを待ち構えt(うわなにをs
86名無しさん@そうだ選挙に行こう:2005/09/11(日) 22:31:30
問題の本質を見抜いた>>85はESPとして>>77に拉致されました
87名無しさん@そうだ選挙に行こう:2005/09/11(日) 22:32:09
>>77
3番と4番、適当と答えられても困る。
はっきりさせてこい。
88名無しさん@そうだ選挙に行こう:2005/09/11(日) 22:33:31
>>84 コレで良い?
#include <stdio.h> #include <stdlib.h> #include <string.h>
struct MJlist {
    char name [20]; int homerun;
    struct MJlist *pointer;};
int main (void) {
    struct MJlist *head = NULL, *temp;
    char name[256]; int homer;
    for (; ; ) {
        printf("batter?:"); scanf("%255s", name); if (!strcmp(name, "end")) break;
        printf("homer?:"); scanf("%d", &homer);
        temp = (struct MJlist*)malloc(sizeof(struct MJlist));
        strcpy(temp->name, name);
        temp->homerun = homer; temp->pointer = head;
        head = temp;}
    temp = head;
    while (temp != NULL) {
        printf("batter:%s, homer:%d\n", temp->name, temp->homerun);
        temp = temp->pointer;}
    while (head != NULL) {
        temp = head; head = head->pointer;
        free(temp);}
    return 0; }
8977:2005/09/11(日) 22:42:16
>>78
に仮の値が書いてます。例があります。
9026:2005/09/11(日) 22:43:33
>>48
遅くなりましたが、ありがとうございます
宜しくお願いしますw
91名無しさん@そうだ選挙に行こう:2005/09/11(日) 22:55:04
>>77
SaveQCResult()だけ書いてほしいってことか?
9277:2005/09/11(日) 22:59:59
>>91
はい。よろしくお願いします。
93名無しさん@そうだ選挙に行こう:2005/09/11(日) 23:09:35
CSVにデータがどんなふうに入ってるかとか、どんな値が異常値なのかとか
最終的に何でtrue/falseの判定をして値を返すのかとかが
わからなくてもこの手のプログラムって作れるもんなの?
9477:2005/09/11(日) 23:51:41
これ以上なにも資料がないんでどうすればいいのかわからないっす・・・
ただ出力ファーマットの出力するプログラムを作って来いって言われました。
自分が考えたのただprintfで固定を作成して、、
あとは変数を$に合わせて出力しようと思いました。。
95デフォルトの名無しさん:2005/09/12(月) 04:54:19
>>94
寝ぼけてるんで違ってるかも知れないが、ざっと見た感じじゃ
printfで出力するときに、アロー演算子使って構造体の内容参照して
表示させていけばいいだけじゃないのか?
処理といえるようなのはせいぜいlocaltimeでtime_tから変換するぐらいだとおもうが
9626:2005/09/12(月) 06:23:58
>>48
【迷路】できました?
97デフォルトの名無しさん:2005/09/12(月) 06:54:19
ん? すぐに返事がなかったのと、具体的な時間指定がなかったから、ネタだと思ってやってないよ。
98デフォルトの名無しさん:2005/09/12(月) 07:41:13
Σ(´д`)
99デフォルトの名無しさん:2005/09/12(月) 11:09:55
>>96
まあ、自業自得だな。
そこそこ技術力があって、なおかつアルゴリズムのヒントが出てるのに
ソースが出てくることを期待して楽をしようとしたのがそもそもの間違い。

・・・と、ここまで書いて気付いたが、
別に>>96はやってないとは書いてないので、
もし、一晩かけて自分でちゃんとプログラム組んでだならエライ。
10077:2005/09/12(月) 12:46:32
>>95
サンクス
小数点の桁数に構造体の変数って使えるのですか?
101デフォルトの名無しさん:2005/09/12(月) 13:45:26
printf 書式指定子とかでぐぐれ
10277:2005/09/12(月) 14:00:04
例えばこんな感じですか?
%5.QCFUNCRESULT.nDarkAveFltPointf
103デフォルトの名無しさん:2005/09/12(月) 14:23:01
>>102
('A`)

お前は本当にprintfを使ったことがあるのかと小一時間ほど問い詰めない
104デフォルトの名無しさん:2005/09/12(月) 14:28:34
>>103
問い詰めないのか・・・!w
10577:2005/09/12(月) 14:34:24
printfは使ったことあるけど、書式が可変なんて使ったことがない。103
106103:2005/09/12(月) 14:52:35
書式指定を使ったことが無いって…
2ヶ月の間何を勉強してきたのかわからんな…。

とりあえずprintfの使い方について調べろ。ググれば例が腐るほど出てくる。

で、自分で書式指定子(%9.2f等)をいじって、出力フォーマットに見合うように調整。
このとき、一気に全部やろうとせず、1つずつ確実にやっていくことをオススメする。

>>104
┬┴┬┴|∀゚) フフリ
107デフォルトの名無しさん:2005/09/12(月) 15:55:30
>>94
> だた……って言われました

その唯一言われたことを何処にも書かずに
どうやって理解してもらうつもりだったんだよ
108デフォルトの名無しさん:2005/09/12(月) 16:05:33
>>103-104
ワロタw

学校で2ヶ月くらいだと何もしてないのと同じくらいだぞ。
実際、始めは全て書いてあるプログラムを入力して動かすくらいで
書いてある意味まで細かく教えたりしないからなぁ…。
半年は#include <stdio.h> /*←おまじない*/で通すくらいだし。

つい最近になってprintf("Hello World!!");でヒャッホー言ってたってとこだろ
109デフォルト名無しさん:2005/09/12(月) 16:46:36
#include<iostream>
using namespace std;
int main()
{
cout<<" ∧_∧ "<<endl;
cout<<" (´∀`)< ぬるぽ"<<endl;


return 0;
}


ちょっとギャグでやってみたら、かわいかった・・・
ごめん、昼間からこんな馬鹿なことやって・・。
110デフォルトの名無しさん:2005/09/12(月) 17:26:26
[1] 授業単元:C++
[2] 問題文(含コード&リンク):
引数起動。testという引数以外では終了しtestという引数で正常起動するプログラムと
ボタンを押すとtestという引数で上記のプログラムを起動させるプログラムを作りなさい。
使用する標準関数:規制無し。
[3] 環境
 [3.1]OS:Windows
 [3.2]コンパイラ名とバージョン:VC++
[3.3]言語:C
[4] 期限:無期限
[5] その他の制限:無し。

引数起動がぐぐっても良く解らないです。
111デフォルトの名無しさん:2005/09/12(月) 17:29:36
>>110
その教官は「testという引数」のフレーズが大好きだな
112デフォルトの名無しさん:2005/09/12(月) 17:32:11
すみません、お願いします(;∀;)
[1] C言語講座
[2] 問題文(含コード&リンク
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/916.txt
二分探索木内を検索する関数を作成する
**で囲まれてる部分がわかりません(;∀;)
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] VC 6.0
 [3.3] 言語: C++
[4] 期限: 明日まで
113デフォルトの名無しさん:2005/09/12(月) 17:47:30
int main(int argc,char* argv[]){
if(argc==1){
printf("引数を指定して下さい。\n");
return 0;
}

if(argc==2){
if(strcmp(argv[1],"test")!=0)
return 0;
}

if(argc>=3){
printf("引数が多すぎます。\n");
return 0;

}


}
114デフォルトの名無しさん:2005/09/12(月) 17:48:43
>>112
     ____
    /∵∴∵∴\
   /∵∴∵∴∵∴\
  /∵∴∴,(・)(・)∴|
  |∵∵/   ○ \|
  |∵ /  三 | 三 |  / ̄ ̄ ̄ ̄ ̄
  |∵ |   __|__  | < うるせー馬鹿!
   \|   \_/ /  \_____
      \____/
115デフォルトの名無しさん:2005/09/12(月) 17:52:59
#include <stdio.h>

int main(int argc, char **argv)
{
 if(argc == 1 || agrv[1] != "test")
  {return -1;}
   
 return 0;
}

ごめん上一行しかわかんね・・・
116115:2005/09/12(月) 17:53:29
>>113 重複スマソ
117デフォルトの名無しさん:2005/09/12(月) 18:01:49
>>112
上から
p = tree_search(root, data);
if( data == p->data ) break;
if( data < p->data ) p = p->left;
else p = p->right;
return p;
118デフォルトの名無しさん:2005/09/12(月) 18:03:53
119デフォルトの名無しさん:2005/09/12(月) 18:45:23
>>115 文字列へのポインタどうしを比較してどーするよ。
120110:2005/09/12(月) 18:59:40
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
if(strcmp(lpCmdLine,"test")!=0){
MessageBox(NULL , lpCmdLine , TEXT("起動エラー") , MB_ICONINFORMATION);
return 0;// 正常起動失敗
}
// 以下、正常動作
}

これでいけました。
後はコマンドラインを指定して起動できるボタンプログラムですが全く分かりませんorz
121デフォルトの名無しさん:2005/09/12(月) 19:02:56
C言語ってゆーよりはWindowsプログラミングなので、そっち系で聞くか調べたほうがいいかもね。
ボタンを配置したダイアログボックスで簡易ランチャーっていうサンプルはけっこうあるはず。
122デフォルトの名無しさん:2005/09/12(月) 19:03:04
[1] C言語
[2] 問題1 a=10、b=20とし、a,bの値を入れ替えて表示しなさい。
  問題2 文字型配列 m[5][20]を用意し、これを5人分の名字で初期化し、
      さらに、文字型配列 n[5][10]を用意し、名前で初期化しそれらを表示しなさい。
  問題3 問題2で作成した名字の入った文字型配列 m[5][20]に、名前の入った n[5][10]を
      連結コピーして表示しなさい。(strcat()を使用する) 
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語: C
[4] 期限:明日まで
[5]その他の制限:二次元配列まで習ってます。問題多くてすみません。お願いします
123デフォルトの名無しさん:2005/09/12(月) 19:10:01
>>115 汚名挽回のチャンスだぞ。
124デフォルトの名無しさん:2005/09/12(月) 19:13:19
適当にインデントしといて
[1]
#include<stdio.h>
int main(){int a=10,b=20;a+=b;b=a-b;a-=b;printf("%d %d",a,b);}
[2]
#include<stdio.h>
int main(){char m[5][20]={"a","b","c","d","e"},n[5][20]={"A","B","C","D","E"};
    int i;for(i=0;i<5;++i)printf("%s %s\n",m[i],n[i]);}
[3]
#include<stdio.h>
#include<string.h>
int main(){char m[5][20]={"a","b","c","d","e"},n[5][20]={"A","B","C","D","E"};
    int i;for(i=0;i<5;++i)printf("%s\n",strcat(m[i],n[i]));}
125112:2005/09/12(月) 19:18:36
>>117
助かりました(´∀` )ありがd
126デフォルトの名無しさん:2005/09/12(月) 19:20:40
>ボタンを配置したダイアログボックスで簡易ランチャーっていうサンプル
興味あったので探しているが見つからない。
サンプルURL知っていたら教えてください。
127デフォルトの名無しさん:2005/09/12(月) 19:22:28
>>122
全角スペースはいってるから気をつけてね
int main()
{
 {
  int a = 10; int b = 20; int c;
  printf("--- Q1 --------\n");/* Q1 */
  printf("a=%d, b=%d\n", a, b);
  c = a; a = b; b = c;
  printf("a=%d, b=%d\n", a, b);
 }

 {
 char m[5][20] = {"Toyota","Suzuki","Honda","Matsuda","HarddGay" };
 char n[5][10] = {"Tarou","Jirou","Saburou","Shirou","Foooooo!" };
  int i;
  printf("--- Q2 --------\n");/* Q2 */
  for(i=0; i<5; i++){ printf("i: %s %s\n", m[i], n[i]); }
  printf("--- Q3 --------\n");/* Q3 */
  for(i=0; i<5; i++){ strcat(m[i], n[i]); printf("i: %s\n", m[i]);}
 }
 return 0;
}
128デフォルトの名無しさん:2005/09/12(月) 19:22:38
>>123
それは「プログラム」の間違いか?それとも「汚名挽回という言葉」の間違いか?
129127:2005/09/12(月) 19:23:38
って、だいぶ前に回答出てたのね・・・
リロードして無かったよorz
130デフォルトの名無しさん:2005/09/12(月) 21:10:03
>>129
(´・ω・`)9mプギャー
131デフォルトの名無しさん:2005/09/12(月) 21:13:16
>>124 >>127 有難う御座います。助かりました
132デフォルトの名無しさん:2005/09/12(月) 21:34:52
133デフォルトの名無しさん:2005/09/12(月) 21:45:03
解りやすいソース有難う(´・ω・`)モットベンキョウシマス
134デフォルトの名無しさん:2005/09/12(月) 21:47:00
あんた誰だ
135デフォルトの名無しさん:2005/09/12(月) 21:50:35
あんたこそ誰だ
俺は誰だ
136デフォルトの名無しさん:2005/09/12(月) 21:54:54
僕が君で
君が僕で・・・えっ!?

ドキドキ
13777:2005/09/13(火) 11:01:19
たびたびすみません、改めて載せます。よろしくお願いします。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/918.txt
138デフォルトの名無しさん:2005/09/13(火) 11:10:42
まだできてなかったのか・・・
13977:2005/09/13(火) 11:19:37
問題の意味を間違えてました。
140デフォルトの名無しさん:2005/09/13(火) 11:24:01
えーっと・・・問題の意味を間違えてました。
の一文だけだと、過去のレスをずーっとチェックして、間違い探しをしないといけないのだけれど・・・。

どこをどう間違って、間違いを正すとどうなるか教えていただけませんか?
14177:2005/09/13(火) 11:39:24
いろいろホントすみませんが、一回自分でやってから、
間違いがあったらそこについてみなさんに聞いてみます。
142デフォルトの名無しさん:2005/09/13(火) 11:40:18
>>140
過去のスレを読んでいた身としては
>>77にはそれを説明する能力は無いと思われます。
143デフォルトの名無しさん:2005/09/13(火) 13:19:13
>>141
添削はめんどいので、とりあえずあげとく
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/919.txt

・桁合わせ、整形は自分でやること。
・ビルドできないときはエラーメッセージをちゃんと書くこと。
・その他わからないところは自分で調べてから聞くこと。

以上
144デフォルトの名無しさん:2005/09/13(火) 16:10:48
[1] 授業単元:C言語
[2] 問題文: キーボードから数値を読み込み、その数に応じて「+-」のパターン
       を表示するプログラムを作成しなさい。(例:7を入力すると、+-+-+-+)
[3] 環境
 [3.1] OS:Fedora CORE
 [3.2] 判らないですorz
 [3.3] 言語:C
[4] 期限:本日17:00頃まで
[5]その他制限:ネスト辺りまで習いました。お願いしますorz
145デフォルトの名無しさん:2005/09/13(火) 16:11:16
なんか>>143がしつけするママみたいw

つーか>>77はガキじゃねぇんだからそれくらいわかるよ、なっ!
146デフォルトの名無しさん:2005/09/13(火) 16:27:10
>>144
#include <stdio.h>

int main()
{
    char pm[]="+-";
    int i, len;

    scanf("%d", &len);

    for (i=0 ; i<len ; i++)
    {
        printf("%c", pm[i%2]);
    }
}
147デフォルトの名無しさん:2005/09/13(火) 16:27:49
>>144
#include <stdio.h>
int main()
{
int i;
int tmp;
char str[256];

scanf("%d", &tmp);
for(i = 0; i < tmp; i++) str[i] = (i%2)? '-': '+';
str[tmp] = '\0';
printf(str);
return 0;
}
148デフォルトの名無しさん:2005/09/13(火) 16:28:34
>>146
助かりますですorz
149147:2005/09/13(火) 16:29:15
>>146ごめ、カムッタ
150デフォルトの名無しさん:2005/09/13(火) 21:41:42
>>149
お、おれはカムってなんかない!
151デフォルトの名無しさん:2005/09/13(火) 22:06:02
わかったわかったw。・・・でも車はカムリだろ?
152デフォルトの名無しさん:2005/09/13(火) 23:47:56
[1] 授業単元: C言語講座
[2] 問題文: 縦横100×100で8ビットのBMPファイルを読みこみ、1ピクセルあたりの画素値を
        CSVファイルにBMPの画像のように同じ様に書きこめ。
[3] 環境
 [3.1] OS: Windows2000
 [3.2] コンパイラ名とバージョン: VC++
 [3.3] 言語: C言語
[4] 期限: [無期限]
[5] その他の制限: BMPのヘッダーを構造体に入れてから画素値を取り出しなさい。また2次元配列を使いなさい。
問題文が変で説明しづらく、半端ですがfopenからヘッダーを構造体に入れる途中までのソースもあげておきます。
よろしくお願いします。
void main(void){
FILE *fp;
      fp = fopen("circle.bmp", "rb");
bmpHead bmpHead1;
// ヘッダー情報を構造体へ
fread(&bmpHead1.bfType, sizeof(bfType), 1, fp);
fread(&bmpHead1.bfSize, sizeof(bfSize), 1, fp);
fread(&bmpHead1.bfReserved1, sizeof(bfReserved1), 1, fp);
fread(&bmpHead1.bfReserved2, sizeof(bfReserved2), 1, fp);
fread(&bmpHead1.bfOffBits, sizeof(bfOffBits), 1, fp);
fread(&bmpHead1.biSize, sizeof(biSize), 1, fp);
fread(&bmpHead1.biWidth, sizeof(biWidth), 1, fp);
fread(&bmpHead1.biHeight, sizeof(biHeight), 1, fp);
fread(&bmpHead1.biPlanes, sizeof(biPlanes), 1, fp);
fread(&bmpHead1.biBitCount, sizeof(biBitCount), 1, fp);
fread(&bmpHead1.biCompression, sizeof(biCompression), 1, fp);
fread(&bmpHead1.biSizeImage, sizeof(biSizeImage), 1, fp);
fread(&bmpHead1.biXPelsPerMeter, sizeof(biXPelsPerMeter), 1, fp);
fread(&bmpHead1.biYPelsPerMeter, sizeof(biYPelsPerMeter), 1, fp);
fread(&bmpHead1.biClrUsed, sizeof(biClrUsed), 1, fp);
fread(&bmpHead1.biClrImportant, sizeof(biClrImportant), 1, fp);
153デフォルトの名無しさん:2005/09/13(火) 23:53:01
[2] 5人の学生の3教科(国語・数学・英語)の点数を2次元配列を
  用いて処理するプログラムを作成せよ。
  (1):科目別の最高点を求める
  (2):3教科の平均点を求める

[3] 1.Windows 2.bcc 3.C

Cを勉強しています。2次元配列の使い方がわかりません。
御教授お願いします。
154デフォルトの名無しさん:2005/09/14(水) 00:08:37
>152
8ビットビットマップ・・・(遠い目)
BI_RGBとBI_RLE8、トップダウンとボトムアップ・・・1行を4バイトのアライメントに・・・
あ・・・あはは。けっこう時間かかりそうなんでパス。

>153
あ・・・あはは・・・。独学かあ・・・教科書変えるといいかもよー。
155デフォルトの名無しさん:2005/09/14(水) 00:13:11
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):配列moji_rを「char moji_r[]="Today I went to church.";
と初期化した場合アルファベット1文字を入力し、moji_rの中にその文字が何回現れるかをカウントし、
表示させるプログラムです。
[3] 環境
 [3.1] OS: Windows
 [3.2] BorlandFree
 [3.3] 言語: C
[4] 期限: [2005年09月15日12:30まで]

最近charを習ったばかりでFor文でリピートさせることはわかるのですがそれ以上がわかりません。
よろしくお願いいたします。
156デフォルトの名無しさん:2005/09/14(水) 00:19:19
int count = 0;
char moji_r[]="Today I went to church.";
char *s;
scanf("%c", &c);
for (s = moji_r; *s; s++)
if (*s == c)
count++;
printf("%d\n", count);
157デフォルトの名無しさん:2005/09/14(水) 00:23:02
#include<stdio.h>
int main(){
    char moji_r[]="Today I went to church.",*s=moji_r,ch;
    int count[256]={0};
    for(;*s;++s)++count[*s&255];
    scanf(" %c",&ch);
    printf("%d\n",count[ch&255]);
}
158デフォルトの名無しさん:2005/09/14(水) 00:25:29
先にヒストグラム作るのか・・・ふむふむ>157
159デフォルトの名無しさん:2005/09/14(水) 00:30:56
>>153
#include <stdio.h>
#include <string.h>
int main()
{
  int man, kamoku, tensu[5][3], heikin[5], saikou[3];
  char kamokumei[3][5]={"国語","数学","英語"};
  memset (saikou, 0, sizeof saikou);
  memset (heikin, 0, sizeof heikin);
  for (man=0 ; man<5 ; man++)
  {
    for (kamoku=0 ; kamoku<3 ; kamoku++)
    {
      printf("%d人目、%s=", man+1, kamokumei[kamoku]);
      scanf("%d", &tensu[man][kamoku]);
      heikin[man] += tensu[man][kamoku];
      if (saikou[kamoku]<tensu[man][kamoku])
      {
        saikou[kamoku]=tensu[man][kamoku];
      }
    }
  }
  for (man=0 ; man<5 ; man++)
  {
    printf("%d人目の平均点は%d\n", man+1, heikin[man]);
  }
  for (kamoku=0 ; kamoku<3 ; kamoku++)
  {
    printf("%sの最高点は%d\n", kamokumei[kamoku], saikou[kamoku]);
  }
  return 0;
}
160デフォルトの名無しさん:2005/09/14(水) 00:35:26
>>159
大変参考になりました。
ありがとうございます!
161155:2005/09/14(水) 08:48:42
156 157ありがとうございます<(_ _*)>

ポインタを利用しない方法はありませんでしょうか?
162デフォルトの名無しさん:2005/09/14(水) 09:36:39
>>161
ありません
moji_rへの操作がsizeof位しか使えなくなるからです。
163デフォルトの名無しさん:2005/09/14(水) 10:34:18
>>161
char *moji_r = "Today I went to church.";
char ch;
int count;
int i;
scanf( "%c", &ch );
for ( i=0, count=0; moji_r[i]; i++ ) if ( moji_r[i] == ch ) count++;
printf( "%d\n", count );
164デフォルトの名無しさん:2005/09/14(水) 17:15:35
>>155
もしかして 女子4人の学科ですか?
165デフォルトの名無しさん:2005/09/14(水) 19:23:35
[1]C言語
[2]符号無し整数xのposビット目を、1にした値を返す関数set、0にした値を返す関数reset、
  反転した値に返す関数inverseを作成せよ。

[3]1.Windows 2.BCC 3.C言語

さっぱりわかりません。どうぞよろしくおねがいします。
166デフォルトの名無しさん:2005/09/14(水) 19:27:58
符号なし整数だと基本的には3種類あるわけだが
167165:2005/09/14(水) 19:33:16
>>166
int型です!お願いします。
168デフォルトの名無しさん:2005/09/14(水) 19:36:08
>>165
unsigned int set(unsigned int x, int pos)
{
    return x | 1 << pos;
}
unsigned int reset(unsigned int x, int pos)
{
    return x & ~(1 << pos);
}
unsigned int inverse(unsigned int x, int pos)
{
    return x ^ 1 << pos;
}

>>167
intは符号無しでない罠。
169デフォルトの名無しさん:2005/09/14(水) 19:36:27
めんどーだからビットフィールド利用しててきとーにかたずけたらぁ
170165:2005/09/14(水) 19:43:11
>>168
すみません、unsigned int型でした。
わかりやすいコードありがとうございます。
理解できました。

>>169
調べてみましたが構造体?まだ習っていないのでよくわかりませんでした。
精進します。ありがとうございました。
171デフォルトの名無しさん:2005/09/14(水) 20:52:23
n個の要素を持つ配列において、
そのn個のすべての組み合わせの
配列を返すプログラムってどんなですか?

例えば配列の要素が(1,2,3)なら、「すべての組み合わせ」としては
[1][2][3][1,2][2,3][1,3][1,2,3]です。

アルゴリズムだけでもよいので教えてください。
172デフォルトの名無しさん:2005/09/14(水) 20:55:05
>>171
std::uniqueとstd::next_permutationをうまく使って
173デフォルトの名無しさん:2005/09/14(水) 20:58:27
>>171
ありがとうございます。参考にします。
174デフォルトの名無しさん:2005/09/14(水) 21:00:00

>>172ですた
175デフォルトの名無しさん:2005/09/14(水) 21:46:15
>>172
std::uniqueって必要あるか?
176デフォルトの名無しさん:2005/09/14(水) 21:48:45
>>171  できたよー。
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>

void get_combi(std::vector<std::vector<int> > &ans,
              std::vector<int> tmp, int *begin, int *end){
  int index = tmp.size();
  tmp.push_back(0);
  for(int *p = begin; p < end ; ++p)
  {
    tmp[index] = *p;
    ans.push_back(tmp);
    get_combi(ans, tmp, p + 1, end);
  }
}

int main(){
  int a[] = {1,2,3,4};
  std::vector<std::vector<int> > ans;
  get_combi(ans, std::vector<int>(), a, a+4);

  for(std::vector<std::vector<int> >::iterator it = ans.begin();
      it != ans.end(); ++it)
  {
    std::copy(it->begin(), it->end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
  }
  return 0;
}
177デフォルトの名無しさん:2005/09/14(水) 21:56:47
・・・ビットのオンオフに帰結しそうだな・・・。
178デフォルトの名無しさん:2005/09/14(水) 22:15:44
ケータイから書いていたら意味不明になってしまった。

typedef struct Nd {
int v;
Nd* prev;
} Nd;

void printNd(Nd* nd, int last) {
printf("[%d", last);
while(nd)
printf(",%d", ndー>v);
puts("]");
}

void rec(int* a, int m, int n, Nd* prev) {
Nd nd = {a[m], prev};
printNd(prev, a[m]);
for(m++; m < n; m++)
rec(a, m, n, nd);
}

int main(void) {
int array[] = {...};
int i, ln = sizeof(array) / sizeof(int);
for(int i=0; i < ln; i++)
rec(array, i, ln, NULL);
puts("\n");
return 0;
}

179デフォルトの名無しさん:2005/09/14(水) 22:20:36
>>177
なるほど
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
#include <functional>

typedef std::list<unsigned int> CombList;

CombList all_comb(size_t first, size_t last) {
  if (first == last) return CombList(1, 0);
  CombList res = all_comb(first + 1, last), res2;
  std::transform(res.begin(), res.end(), std::back_inserter(res2), bind2nd(plus<unsigned int>(), 1 << first));
  res.merge(res2);
  return res;
}

int main() {
  int   numbers[] = {1, 2, 3, 4};
  int   length = sizeof(numbers)/sizeof(numbers[0]);
  CombList s = all_comb(0, length);
  for (CombList::iterator it = s.begin(); it != s.end(); ++it) {
    for (int i = 0; i < length; i++)
      if (*it & (1<<i))
        std::cout << " " << numbers[i];
    std::cout << std::endl;
  }
}
180179:2005/09/14(水) 22:30:05
素直に1から(1<<length) - 1までインクリメントでいいじゃん。あははははは
181デフォルトの名無しさん:2005/09/14(水) 22:32:28
なおしました。これであってますかね?自身ないw

#include <stdio.h>

typedef struct Nd Nd;

typedef struct Nd {
  int v;
  Nd* prev;
} Nd;

void printNd(Nd* nd, int last) {
  printf("[%d", last);
  while(nd) {
    printf(",%d", nd->v);
    nd = nd->prev;
  }
  puts("]");
}

void rec(int* a, int m, int n, Nd* prev) {
  Nd nd = {a[m], prev};
  printNd(prev, a[m]);
  for(m++; m < n; m++) rec(a, m, n, &nd);
}

void main(void) {
  int array[] = {...};
  int i, ln = sizeof(array) / sizeof(int);
  for(i=0; i < ln; i++) rec(array, i, ln, NULL);
  puts("\n");
}
182デフォルトの名無しさん:2005/09/14(水) 22:44:46
typedef struct _Nd {
int v;
struct _Nd* prev;
} Nd;

こうしたら、通った。
183デフォルトの名無しさん:2005/09/14(水) 22:56:47
ビットのオンオフってのは、そのつもりで言った(^^;;>180
184デフォルトの名無しさん:2005/09/14(水) 23:01:26
無茶苦茶な書き方をしてみる
#include <stdio.h>
typedef struct List List;
struct List {
  int   value;
  List  *next;
};
void print_list(List * lis) {
  for (; lis != NULL; lis = lis->next)
    printf(" %d", lis->value);
  puts("");
}
void print_combi(int * data, int len, List * tail) {
  if (len <= 0) {
    print_list(tail);
  } else {
    List        head;
    print_combi(data, len - 1, tail);
    head.value = data[len-1], head.next = tail;
    print_combi(data, len - 1, &head);
  }
}
int main(void) {
  int data[] = {1,2,3,4};
  print_combi(data, sizeof(data)/sizeof(data[0]), NULL);
  return 0;
}
185デフォルトの名無しさん:2005/09/14(水) 23:11:18
>>171大人気だな
186デフォルトの名無しさん:2005/09/14(水) 23:35:22
少なくとも入力チェックやCSVファイル云々より面白いからな。
逆にGUIとかになると面倒くさくなるし。これぐらいが丁度いい。
187デフォルトの名無しさん:2005/09/14(水) 23:35:46
俺も俺も。表示するだけだけど。
#include <stdio.h>
#include <stdint.h>
void print(const int a[], const uint8_t size, const uint32_t bits)
{
uint32_t mask, i = 0;
for(mask = 1U << (size-1) ; mask; mask >>= 1, ++i)
if( mask & bits ) printf("%d ", a[i]);
printf("\n");
}
void comb(int a[], uint8_t size, uint32_t mask, uint32_t bits)
{
if( mask == 0) print(a, size, bits);
else
{
comb(a, size, mask >> 1, bits | mask);
comb(a, size, mask >> 1, bits & ~mask);
}
}
main()
{
int a[] = {1,2,3,4,5};
uint32_t size = sizeof(a)/sizeof(*a);
comb(a, size, 1U << (size-1), 0);
}
188187:2005/09/14(水) 23:48:56
こっちのがいいかな
void print(const int a[], const uint8_t size, uint32_t bits)
{
  if( bits != 0 )
  {
    uint32_t i;
    for(i = 0; i < size && bits; ++i, bits >>= 1)
      if(bits & 1U) printf("%d ", a[i]);
    printf("\n");
  }
}
189デフォルトの名無しさん:2005/09/14(水) 23:53:55
>>171 は出題者が知恵者だなぁ。
宿題の回答を読んで楽しむ姿が想像できる様だ
190デフォルトの名無しさん:2005/09/14(水) 23:58:54
まあ・・・宿題でわないと思うが(^^;;
おもろい出題だわな。
Cだと二次元の長さが一定でない配列をどう表現するか・・・
てな話も入ってくるんでprintだけになってしまうのが残念だが。
191デフォルトの名無しさん:2005/09/15(木) 01:01:08
何か今更な気がするけども>>171のを俺もやって見た。
表示しかしないし順番も滅茶苦茶だが。ビット演算とか知らないから他の人の見てもよくわからんorz

void printlist (int list[], int szlist) {
int i, j, k, temp;

for(k = 0; k < szlist; k++) {
for(i = k; i < szlist; i++) {
for(j = i; j < szlist; j++) {
printf("%d ", list[j]);
}
printf("\n");
}
temp = list[szlist - 1];
list[szlist - 1] = list[k];
list[k] = temp;
}
}

void main() {
int test[] = {1, 2, 3};
printlist(test, sizeof(test) / sizeof(int));
}
192191:2005/09/15(木) 01:14:51
訂正orz

void printlist (int list[], int szlist) {
int i, j, k, temp;

for(k = 0; k < szlist; k++) {
for(i = k; i < szlist; i++) {
for(j = k; j < i + 1; j++) {
printf("%d ", list[j]);
}
printf("\n");
}
temp = list[0];
list[0] = list[k];
list[k] = temp;
}
}
193デフォルトの名無しさん:2005/09/15(木) 01:18:33
あーあー貼るソース間違えたorz
もう駄目。回線切ってつってくる(´;ω;`)
194デフォルトの名無しさん:2005/09/15(木) 03:21:42
>>171
アルゴリズムだけっていうことで次を参考にして関数に仕上げて下さい。
#include <stdio.h>
#include <stdlib.h>
void power(int *p, char *s){
char *buf;
if(*p==-1){printf("%s\n",s);return;}
power(p+1,s);
buf=(char *)malloc((sizeof(char))*(strlen(s)+2));
sprintf(buf,"%d %s",*p,s);
power(p+1,buf);
}
main(){
int x[]={3,2,1,-1};
power(x,"");
}
195デフォルトの名無しさん:2005/09/15(木) 20:54:00
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):ttp://www.ced.is.utsunomiya-u.ac.jp/lecture/2004/prog/p1/kadai4/kadai4_3_2.html
                  の3.3 台形公式による二重積分のところ穴埋めおながいします。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC .NEET
 [3.3] 言語: C
[4] 期限: 明日
[5] その他の制限: 茄子
196デフォルトの名無しさん:2005/09/15(木) 20:57:27
>>195
>そいつはすごい、どこまでも胡散臭くて、安っぽい宝の地図

まで読んだ。
197デフォルトの名無しさん:2005/09/15(木) 21:22:20
俺は
>「こいつはすごい財宝のありかなんだ」信じきった彼はとうとうその真偽を
まで読んだ
198195:2005/09/15(木) 21:27:29
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/104.txt
二重積分はこんな感じでよいですか?
199155:2005/09/16(金) 00:59:42
162.163ありがとうございます。
あれから自分で考えたのですが
#include<stdio.h>
void main(void)
{
char moji_r[]="Yesterday I went to church,it was a splendid experience.";
char search;
int i,count=0;

printf("調べる文字を半角1文字を入力==>");
scanf("%d",search);

for(i=0;moji_r[i]!='\0';i++){
if(moji_r[i]==search){
count++;
}
}
printf("Yesterday I went to church,it was a splendid experience.の中に\n");
printf("%cは、%d個入っています",search,count);
}


という方法で実行したのですがうまくいきません。

コンパイラはエラーがでないのですが実行すると何を入力しても下記のようになってしまします。
C:\>test
調べる文字を半角1文字を入力==>w
Yesterday I went to church,it was a splendid experience.の中に
 は、0個入ってます

となってしまいます。どこが悪いのでしょうか?
200デフォルトの名無しさん:2005/09/16(金) 01:01:13
scanf("%d",search);

scanf("%c", search);
な。
201デフォルトの名無しさん:2005/09/16(金) 01:01:46
まちがった。すまん。
scanf("%c", &search);
な。
202デフォルトの名無しさん:2005/09/16(金) 10:27:16
強いて言えば宿題というわけではないのですが
char*型の文字列をchar*型の配列に代入して表示させたいのですがどうすればいいんでしょうか
//----------------
int i,len;
char * mojiretu = "hogehoge";
char * mojihairetu[64];

//mojiretuを1文字ずつmojihairetu[]に代入

len = strlen(mojiretu);

for(i=0;i<len;i++){
printf("%s", mojihairetu[i]);
}
//----------------
・出力予想

hogehoge

char型の配列になら代入できたけどchar*型となるとうまくいかないようだ
1ヶ月間やってそこそこ分かってきたぜ、と思ってたらこんなところで引っかかるとは・・・
203デフォルトの名無しさん:2005/09/16(金) 10:44:53
>>202
以下は全部同じ
 char * mojiretu = "hogehoge";
 char mojiretu[] = "hogehoge";
 char mojiretu[] = {'h', 'o', 'g', 'e', 'h', 'o', 'g', 'e'};
「char*型の文字列」ではなく「char型の文字列」な。

char * mojihairetu[64] というのはポインタの配列。
この中に入るのchar型のデータを指すポインタ(char*)。
204203:2005/09/16(金) 10:46:17
 × char mojiretu[] = {'h', 'o', 'g', 'e', 'h', 'o', 'g', 'e'};
 ○ char mojiretu[] = {'h', 'o', 'g', 'e', 'h', 'o', 'g', 'e', '\0'};
だったorz
205デフォルトの名無しさん:2005/09/16(金) 10:49:51
すまん、ソースで直入力じゃなくてmojihairetuに代入をする話らしいんだ
どんな時に使うのかは経験が浅くて分からないが・・・
取りあえず流石にこれは通らなかった mojihairetu = mojiretu;
206デフォルトの名無しさん:2005/09/16(金) 11:04:33
>>202
おまいのやりたいことを実現するにはこうするしかない。
for (i = 0; i < len; i ++)
{
  mojihairetu[i] = (char *) malloc(2);
  mojihairetu[i][0] = mojiretu[i];
  mojihairetu[i][1] = '\0';
}
/* freeもしてね */

そしてここは宿題スレなので>>1にしたがってテンプレ使ってください。
207デフォルトの名無しさん:2005/09/16(金) 11:14:58
サンクス、希望通りの動作をしたよ
そして手間を取らせてすまんかった。
この問題は宿題と言うか課題と言うか先輩の命令と言うかだったんだ・・・
208デフォルトの名無しさん:2005/09/16(金) 11:16:30
>>205
int i,len;
char * mojiretu = "hogehoge";
char mojihairetu[64];
len = strlen( mojiretu );
for ( i=0; i<len; i++ ) mojihairetu[i] = mojiretu[i];
for ( i=0; i<len; i++ ) printf( "%c", mojihairetu[i] );

文字列末尾のnulコードはターミネーターである
って理解している?
209デフォルトの名無しさん:2005/09/16(金) 11:17:33
つーか、素直に判らないと先輩とやらに言えばいいものを……
210デフォルトの名無しさん:2005/09/16(金) 11:23:33
怖くていえないんだもん( ";ω;" );
211デフォルトの名無しさん:2005/09/16(金) 11:52:03
>>208
> 文字列末尾のnulコードはターミネーターである
> って理解している?

といいながら自分は入れてないのなw
ヌル文字入れればprintf(mojihairetu)とかprintf("%s", mojihairetu)で済むよ
212デフォルトの名無しさん:2005/09/16(金) 12:02:46
長さ n の配列の部分列(連続する部分) の中で,部分列を合計がある数 x に最も近いものを求めよ.
O(n^2) 未満で解けませんか?

例ですが,
[-10,31,40] から 合計が 15 に最も近い部分列を求める場合

まず部分列は以下の6つになり,
[-10], [31], [40], [-10,31], [31,40], [-10,31,40]

これらの合計の中で最も 15 に近いものは
-10, 31, 40, 21, 71, 61
の中から選択するので

21 つまり,(要素 1〜2) が答えになります.

よろしくおねがいします.
213デフォルトの名無しさん:2005/09/16(金) 12:07:06
>>212
>>1を読めないのか?
214デフォルトの名無しさん:2005/09/16(金) 12:09:44
アルゴリズムの質問か。しかもテンプレに沿っていない。
サヨウナラ
215デフォルトの名無しさん:2005/09/16(金) 12:16:52
>>213,214
ごめんなさい

[1] C演習
[2] >>212
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc 2.9
 [3.3] 言語: C
[4] 期限: 2005/09/30
[5] その他の制限: ありません
216デフォルトの名無しさん:2005/09/16(金) 12:47:28
>>202
for(int i = 0; i < strlen(mojiretu); i++) {
sprintf(mojihairetu[i], "%c", mojiretu[i]);
}
じゃ駄目なの?試してないから動くかわかんないけど。
217デフォルトの名無しさん:2005/09/16(金) 12:49:23
>>216
mojihairetu[i]のポインタに領域が割り当てられていない。
218デフォルトの名無しさん:2005/09/16(金) 13:08:41
ああ、なるほど。動的な二次元配列なのか。
C++ならstd::vector <std::string> mojihairetu;
とかで済むのにねぇ。
219デフォルトの名無しさん:2005/09/16(金) 14:04:23
>>203
嘘を教えるな
>   char * mojiretu = "hogehoge";
は、ポインタ
>   char mojiretu[] = "hogehoge";
は、char配列
220デフォルトの名無しさん:2005/09/16(金) 14:12:26
>>203はアフォだが、初心者はそこまで気にしなくてもいいでしょ別に
221デフォルトの名無しさん:2005/09/16(金) 14:28:19
>>219
そのポインタ(配列)を使う時に、実際に何か差があるのですか?
同じ結果を出すための別解と解釈してよいでしょうか
222デフォルトの名無しさん:2005/09/16(金) 14:30:29
覚えたての知識をちょっとひけらかしてみたくなった。今は反省している。
223デフォルトの名無しさん:2005/09/16(金) 14:50:58
>>221
>   char * mojiretu = "hogehoge";
こっちはスコープ内に確保される領域はポインタ1つ分で
"hogehoge"はリテラル文字列であり、プログラム起動時から終了時まで寿命がある

外部変数として
char hogehoge[9]={'h','o','g','e','h','o','g','e','\0'};
があり、
char *mojiretu;
mojiretu = hogehoge;
としているようなもの


>   char mojiretu[] = "hogehoge";
こっちはスコープ内に確保される領域はchar9つ分でその初期値を設定しているだけ

char mojiretu[9];
mojiretu[0]='h';mojiretu[1]='o';mojiretu[2]='g';mojiretu[3]='e';
mojiretu[4]='h';mojiretu[5]='o';mojiretu[6]='g';mojiretu[7]='e';mojiretu[8]='\0';
としているようなもの
224デフォルトの名無しさん:2005/09/16(金) 14:54:35
225デフォルトの名無しさん:2005/09/16(金) 15:06:06
インクリメント出来るか出来ないかの違いだと思ってた
226デフォルトの名無しさん:2005/09/16(金) 15:24:11
>>215
それってO(n^2)未満にすることも宿題の条件なの?
部分集合は2^n-1個あるのにその条件は無謀な気がするが
227デフォルトの名無しさん:2005/09/16(金) 15:54:06
また面白そうな問題が。
一旦ソートするとかどう?
228デフォルトの名無しさん:2005/09/16(金) 16:01:54
部分集合ではなく部分列なので、単純に「i 番目から始まる部分列で一番近いもの」
を求めるのは O(n)で、 i を1 からまで動かすのでO(n^2)
229デフォルトの名無しさん:2005/09/16(金) 16:29:43
分割統治でも結局は全組み合わせを走査しないとならないからO(n^2)の壁は打ち破れんな。
やっぱり>>227の言う通り何らかのソートが必要かも。
元の配列の「順番」はキープしつつ、「和」にあたる部分を間接的にソートか・・・難しいな。
たぶんこれ宿題とかじゃないだろw
230226:2005/09/16(金) 16:37:42
>>228
あっ、よく読んで無かったよ
231デフォルトの名無しさん:2005/09/16(金) 16:56:43
1)準備
開始位置、終了位置、和のテーブルを作る O(n^2)
テーブルを和をキーにソート O(n log n)
テーブルの和の重複チェック O(n)

2)検索
バイナリサーチ O(log n)
232デフォルトの名無しさん:2005/09/16(金) 17:18:47
ケータイで書いてたら意味不明になってしまった。
間違ってなかったらO(n^2/2)位かな?

void search(int* a, int ln, int t, int startEnd[2]) {
int m, n, M, N;
int unko;
startEnd[0]=startEnd[0]=-1;
for(M=0, N=ln; M < N;) {
int sum;
for(m=M, sum=0; m < N; m++) {
int sAbs;
sum+=a[m];
if(unko > abs((sAbs = (sum - t)))) {
unko = sAbs;
startEnd[0]=M; startEnd[1]=m;
}}
N--;
for(n=N, sum=0; n > M; n--) {
int sAbs;
sum+=a[n];
if(unko > abs((sAbs = (sum - t)))) {
unko = sAbs;
startEnd[0]=N; startEnd[1]=n;
}}
M++;
if(unko == t) break;}}
233デフォルトの名無しさん:2005/09/16(金) 17:37:54
>>231 >>232
それは O(n^2) という。
234デフォルトの名無しさん:2005/09/16(金) 17:39:08
O(n log n)を思いついた。検証よろ。

1.左端からi番目の要素までの和からなる列を作る。元が
-10, 31, 40
なら、
0, -10, 21, 61
になる。ここから二数を選んで、右から左を引くと対応する部分列の和になる。O(n)。

2.この列を覚えておいて、ソートしたコピーを作る。O(n log n)。

3.できたコピーを双方向リストと平衡木の二重構造に入れる。O(n)。
この平衡木は、削除O(log n)、探索O(log n)で、「あるキーに最も近い要素」の探索もO(log n)

4.覚えておいた列の左から順にポインタpが動く間、次のことをする。O(n log n)
i: 平衡木から*pを削除。O(log n)
ii: *pとの差が問題の数に最も近くなる要素を平衡木から探索。O(log n)
235234:2005/09/16(金) 17:50:10
つか、平衡木の実装とかやってられんのだが。
もっといいアルゴリズムきぼん。
236デフォルトの名無しさん:2005/09/16(金) 17:56:08
>>234
うーん、なんか着眼点よさげかも。
ちょっと後半がよくわからんな。
双方向リストと平衡木の二重構造とやらのノードの構造体だけでも書いてみてよ。
237デフォルトの名無しさん:2005/09/16(金) 18:04:54
>>236
struct k
{
int value;
struct k *next; /* 次に大きいノードを指す */
struct k *prev;
struct k *left; /* 左部分木を指す */
struct k *right;
};
238デフォルトの名無しさん:2005/09/16(金) 18:06:10
>>234
おお、凄い。確かに実装するのは辛そうだがw
239デフォルトの名無しさん:2005/09/16(金) 18:33:15
>>234
素晴らしい。ただ、右から左を引かなければならないので、
そこはうまく工夫して「右のもので最も求める値に近くなるもの」が検索
できないと駄目かも。
ただ、これが O(log n) でできれば、ここの候補を馬鹿サーチしても
O(nlogn)だね。
うまく、「自分より右でかつ値に近い」というのを順序でできれば
解決だね。
240デフォルトの名無しさん:2005/09/16(金) 18:44:33
>>239
誤って左と比べないように4-iで順番に削除してるんだが、だめか?
241239:2005/09/16(金) 18:48:52
>>240
書いたあと気づいたけど、それで大丈夫みたい。ごめんなさい。
すばらしい。
242デフォルトの名無しさん:2005/09/16(金) 19:17:26
>>235 平衡木は2色木誰かやってなかったっけ。
243デフォルトの名無しさん:2005/09/16(金) 20:02:26
これか?
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/899.c
標準外の機能を使ってるってのが問題だな

//チラシの裏
ちなみにGCがあると2色木の挿入は恐ろしく簡単になる
削除する時は今回は2度と挿入しないんだからrebalanceする必要ないしな
244デフォルトの名無しさん:2005/09/16(金) 20:52:56
>>234
ソートしたコピーと双方向リストは何に使うの?
245234:2005/09/16(金) 20:55:23
246234:2005/09/16(金) 21:01:20
>>244
ソートしたコピーは特に使わない。ソートしながら木を構築できるならそれでもよし。
双方向リストは、「キーにもっとも近い要素」の探索を対数時間でできるようにするための仕組み。
通常の木の探索で「キー以上の値を持つ要素のうち最小のもの」を見つけた後、
リストを一つ前に辿ってそれも検討する。

>>243
>削除する時は今回は2度と挿入しないんだからrebalanceする必要ないしな
気づかなかった…
考えてみればリストは双方向である必要はないし、木は平衡木である必要はないな。
247デフォルトの名無しさん:2005/09/17(土) 02:36:58
>>246
> 木は平衡木である必要はないな。
いや、平衡木だからこそlog nで検索できたんでは内科?

まあ何はともあれ、
・和で配列を作る
・平衡木を使う
の2点はカッコヨカッタ
248デフォルトの名無しさん:2005/09/17(土) 03:02:24
漏れの脳では二分探索木で、値に最も近い数を求めるってのが出来ん。
はふぅ。
249215:2005/09/17(土) 06:42:51
皆様ありがとうございます.なんとか理解できたつもりです.

1. 累積させた配列を作成してソートする.
2. その配列を左から順に見ていき(a[i], 1 ≦ i ≦ n),右の残りの配列の中でa[i] との差が最も x に近い値を求める.
2.1 その際に二分探索で求める.

ということでしょうか.

これなら,確かに n * log n です.

これは思いつきません.ソートと二分探索が効いてますね.
二分探索は探索して見付からなかったときに最終位置と
左右どちらかで近い方を選択することでできるのかな..

>>234
累積配列の最初に,0 があるおかげで,a[2] 〜 a[n] じゃなくて a[1] 〜 a[n]
の部分列が求められるのか.こういうの苦手です.

>>245
便利な関数がいっぱいあるのだと勉強になりました.
partial_sum とかそのまんまのがあるんですね.
find_nearest がむずい…(´・ω・ :;.. 頑張ります.

感心してばかりでした.ありがとうございました.
250デフォルトの名無しさん:2005/09/17(土) 10:43:07
>>248
レフトポインタとライトポンタが重なったら、その左右の値を調べればいいんじゃないの?
251デフォルトの名無しさん:2005/09/17(土) 13:23:43
random access iteratorでないとlowerbound()やupperbound()が
使えないのは、二分探索が使えないからだよね。
252デフォルトの名無しさん:2005/09/17(土) 17:35:07
あんまりちゃんと検証してないけどC
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/926.c
253デフォルトの名無しさん:2005/09/17(土) 17:58:36
>>252
すげー。
ちゃんと赤黒木実装してるし。
search_nearestはエレガントだし。

せっかく書いたから俺もあげとく。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/927.txt
254234:2005/09/17(土) 18:19:27
>>249
>1. 累積させた配列を作成してソートする.
>2. その配列を左から順に見ていき(a[i], 1 ≦ i ≦ n),右の残りの配列の中でa[i] との差が最も x に近い値を求める.
>2.1 その際に二分探索で求める.

微妙に違う気がする。左から見ていくのはソートする前の配列ね。

>find_nearest がむずい…(´・ω・ :;.. 頑張ります.

>>245のfind_nearestは間違ってた。
結果は正しいし、計算量も問題ないけど、これだとリストの価値がない。
つまり、そもそもリストは要らなかった。(thx >>252)

ついでに、>>253も俺です。
255デフォルトの名無しさん:2005/09/17(土) 23:41:31
最大部分和(?)だったかな、
これ配列を1度だけ見ていくだけで求まるロジックがあるので
そいつを応用すればO(n)だと思う
ちょっと探してみるよ
256デフォルトの名無しさん:2005/09/17(土) 23:54:51
気のせいならいいのだが。

4要素{A,B,C,D}に対して、
生成される部分列は{A,B,C,D, A+B,B+C,C+D, A+B+C,B+C+D, A+B+C+D}
つまり、n要素に対する部分列の個数はn(n+1)/2である。

A,B,C,Dの何れも正負の符号を取るのならば、
部分列に新たな要素を加算した総和が元に比べ単純増加するとは限らない。
(A+B)>(A+B+C)という可能性もある。
結局、全ての部分列の要素について総和を求める必要がある。

これは数列の要素数nが2以上の場合になりたち、この問題の計算量は最小でもO(n^2)である。

のではまかろーに?
257256:2005/09/18(日) 00:02:39
0xff get失敗です…(´з`)
258256:2005/09/18(日) 00:03:27
ぐはっ、、、2連でsage忘れた、、、申し訳ない。
259デフォルトの名無しさん:2005/09/18(日) 00:10:37
>>256
漏れもそこ気になった。要素が全て正ならば成り立つけれど、
負も含まれてしまうと問題になる希ガス
260デフォルトの名無しさん:2005/09/18(日) 00:12:01
Cでコンパイラー開発できる人いますか?
261デフォルトの名無しさん:2005/09/18(日) 00:12:48
います
262デフォルトの名無しさん:2005/09/18(日) 00:13:40
>>260 居る、以上。
26359:2005/09/18(日) 00:17:06
コンパイラー開発って、色々な概念があるんですか?
それとも、基本的にはある概念にそって開発するんですか?
264デフォルトの名無しさん:2005/09/18(日) 00:17:46
何を何にコンパイルするかによってぜんぜん違う。
265デフォルトの名無しさん:2005/09/18(日) 00:20:49
266デフォルトの名無しさん:2005/09/18(日) 00:26:02
>>256
気のせいだ。
木の中には
{ 0, A, A+B, A+B+C, A+B+C, A+B+C+D }...(1)
が小さい方から順に入っている
この木からxに最も近いもの,x+Aに最も近いもの,...,x+A+B+C+Dに最も近いもの
を探している。そうやって擬似的に
{ B, B+C, B+C+D } ...(2)
{ C, C+D }
  :
という集合を作り出してその中からxに近いものを探索しているわけだね
(1)からx+Aに近いものを探索するのと(2)からxに近いものを探索するのは同じことだ(ただし>>239-240参照)
また、すべての要素から一定の値が引かれてるから順序関係は変わらない
故に、その探索はそれぞれ O(log n)ですむ(全部調べなくていい)
それをn回やってその中で1番xに近いものはすべての組み合わせの中でもxに一番近い
だからオーダーはO(n log n)だ。と
267255:2005/09/18(日) 00:43:53
とりあえずできたみたいなんだけど...

int tbl[]={-10,31,40};
#define TBL_SIZE (sizeof(tbl)/sizeof(int))
#define KEY 15
int main(void)
{
int i,max,sum,maxst,maxed,st,ed;
max=sum=tbl[0];
maxst=maxed=st=ed=0;
for(i=1; i<TBL_SIZE; ++i){
if(sum!=0){ sum+=tbl[i]; ed=i;}
else{ sum=tbl[i]; st=ed=i;}
if(abs(sum-KEY)<abs(max-KEY)){ max=sum; maxst=st; maxed=ed;}
}
printf("\n%d <- [%d]-[%d]\n", max,maxst,maxed);
return 0;
}
268デフォルトの名無しさん:2005/09/18(日) 00:48:41
あれ?
find {x+A+B+C} from sort{0,A,A+B,A+B+C,A+B+C+D}をしてしまったら
AやA+Bが選択される危険性があるような…
269256:2005/09/18(日) 00:56:27
>> { B, B+C, B+C+D } ...(2)
>> { C, C+D }
を生成しているつもりで、

{ -A , 0 , B , B+C , B+C+D}
{ -A-B, -A, 0 , C , C+D} を生成している罠。
しかもソートされているので、不要な要素(0から左)が消せないのでは?
270256:2005/09/18(日) 01:03:11
単に削除する順序を記述した表を作成すればいいのかな?
そうすればO(1)でできそう。
271デフォルトの名無しさん:2005/09/18(日) 01:05:32
C言語のプログラムで次の数列を表示するのですが、
やり方を教えてください!

1 1 1 1
2 4 8 16
3 9 27 81
4 16 64 256

宜しくお願いします!
272デフォルトの名無しさん:2005/09/18(日) 01:06:40
>>1 にやり方が乗ってるぞ!!
273デフォルトの名無しさん:2005/09/18(日) 01:18:12
>>271
#include <stdio.h>

int main()
{
    int i,j,num;
    
    for (i=1 ; i<5 ; i++)
    {
        num=i;
        for (j=0 ; j<4 ; j++)
        {
            printf("%d ", num);
            num*=i;
        }
        printf("\n");
    }

    return 0;
}
274デフォルトの名無しさん:2005/09/18(日) 01:24:18
>>212
>>267 でいいのか?
O(n)だぞ
275デフォルトの名無しさん:2005/09/18(日) 01:28:49
どこが原因かわからないが、、、
>>253
arr={10,30,-5}で15となる組合検索(解- 0 1 2)を実行しても(0 2)が蛙。
276デフォルトの名無しさん:2005/09/18(日) 01:34:18
>>267
int tbl[]={-10,40,31};
277デフォルトの名無しさん:2005/09/18(日) 01:39:54
>>267
> int data[] = {-10, 31, 40, -30, 8, -9, 3, 10, -67, 45}; /* => 13:[6, 7] */
278デフォルトの名無しさん:2005/09/18(日) 01:48:36
>>273
ありがとうございます!
せっかく解いてもらったのに申し訳無いのですが
自力で出来ました。
また、分からない時はぜひお願いします!!
279デフォルトの名無しさん:2005/09/18(日) 01:59:25
C、c++どちらでもいいのですが
最尤系列推定のプログラムおしえてください。
280デフォルトの名無しさん:2005/09/18(日) 02:03:29
>>267
それじゃ駄目だろう。
区切られた部分列が解の部分列の一部になっている場合はどうする?
281デフォルトの名無しさん:2005/09/18(日) 14:21:36
[1] 授業単元: C課題
[2] 問題文(含コード&リンク):http://www.geocities.jp/kabutomusi1/kadai.txt
[3] 環境
 [3.1] OS: Windows
[3.2] コンパイラ名とバージョン: BCC
 [3.3] 言語: Cでお願いします。
[4] 期限: [明日]
[5] その他の制限:なるべく簡単に。

宜しくお願いします。
282デフォルトの名無しさん:2005/09/18(日) 14:33:50
>>281
配列の要素数、或いは終端条件を提示してください。
283デフォルトの名無しさん:2005/09/18(日) 14:36:04
>>281
配列のデータ入力方法も、だな。
コマンドラインから入力するのか、ソースにベタ書きでいいのか。
284デフォルトの名無しさん:2005/09/18(日) 14:36:30
>>281
配列の要素数は?
確か先頭へのポインタとして渡された場合、ヌル終端されてるとか
負数があるとかの決まりがないと、関数側じゃ要素数は取得できないと思うが
以下、要素数をnとしたときのソース@脳内コンパイラ

double Average(int *p)
{
unsigned long diff=0;
int i;
for (i=1;i<n;i++)
diff += p[i] - p[i-1];
return (double)p[0] + ((double)diff)/n;
}
285デフォルトの名無しさん:2005/09/18(日) 14:38:48
>>284
訂正
誤)diff += p[i] - p[i-1];
正)diff += p[i] - p[0];
286デフォルトの名無しさん:2005/09/18(日) 14:43:32
>>281
適当に仕様を想像した結果
#include<stdio.h>
double Average(int *p){
    double d=0.0;
    int i;
    for(i=0;p[i]!=-1;i++){
        d+=(double)p[i];
    }
    if(i==0)return -1.0;
    return d/i;
}
int main(){
    int a[11],i;
    for(i=0;i<10;i++){
        printf("整数[%d]==>",i);
        scanf("%d",&a[i]);
        if(a[i]==-1)break;
    }
    a[i]=-1;
    printf("\n平均:%.1f",Average(a));
    return 0;
}
287デフォルトの名無しさん:2005/09/18(日) 14:46:23
実行画面とやらを眺めてて思ったが、ひょっとして
10個若しくは要素にー1が現れるまでが条件か・・・?
つーか、問題はちゃんと全部書けと散々言ってるだろう
それで問題全部なら、出題した奴の頭に蛆でも沸いてるんじゃねーの
288デフォルトの名無しさん:2005/09/18(日) 14:55:50
>>287
条件はそういうことだと思います。
問題はこれで全部です。
289デフォルトの名無しさん:2005/09/18(日) 14:59:32
配列のデータのaveをAverageのプロトで返せってことだろ。
配列の[9]には-1が格納されるべき。
290デフォルトの名無しさん:2005/09/18(日) 15:01:34
ごめん言いたかったのは、
もし-1が要素の終了条件であるならば、実行画面1の[9]には-1が格納される筈。
ってこと
291デフォルトの名無しさん:2005/09/18(日) 15:03:46
>>289
実行例1には[9]にも90と入ってるぞ

とりあえず287に書いた条件で手直ししてみた
例によって相変わらずの脳内gccだから違ってるかも知れない(特にキャスト周辺)
ちゃんと動くか確認してみてくれ
double Average(int *p)
{
unsigned long diff=0;
int i;
for (i=1;i<10 && p[i] != -1;i++)
diff += p[i] - p[i-1];
return (double)p[0] + ((double)diff)/((double)i);
}
292デフォルトの名無しさん:2005/09/18(日) 17:27:37
>unsigned long
ダメだと思う
素直にdoubleにしとけよw
293デフォルトの名無しさん:2005/09/18(日) 18:03:44
別に問題の中では正の値なんだしunsignedでも構わないだろ。
まぁ減点対象だろうが
294デフォルトの名無しさん:2005/09/18(日) 19:18:45
>292
-1が入ってたら打ち切り、なんだろ?
負数が無いと仮定した方がしぜんジャマイカ
295デフォルトの名無しさん:2005/09/18(日) 19:55:57
>>294
ちゃんと>291を読めよ。
負の数を代入する可能性があるのは見えないか?
296デフォルトの名無しさん:2005/09/18(日) 20:04:20
>295
見えない
つーかあったとしても-1だけ例外なのはおかしいし
297デフォルトの名無しさん:2005/09/18(日) 20:11:23
>>296
そうではなくて、p[i] - p[i - 1] も見えないのか?
298デフォルトの名無しさん:2005/09/18(日) 20:40:27
ということだよ>293
299デフォルトの名無しさん:2005/09/19(月) 02:33:52
291を書いた物ですが、寝ぼけてたせいかとんでもない大チョンボやらかしてた・・・('A`)
unsignedじゃダメじゃんか・・・longだよlong_| ̄|○
300デフォルトの名無しさん:2005/09/19(月) 02:34:52
しかも、p[i]-p[i-1]じゃなかった、p[i]-p[0]だよ・・・
もう寝る('A`)ノシ
301デフォルトの名無しさん:2005/09/19(月) 13:19:56
[1]C
[2]文字列strの中に、文字cが含まれていればその添字を返し、
含まれていなければ-1を返す関数
int str_char(const char str[], int c)
を作成せよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/929.txt
関数部分は合っていると思うのですがエラーが出てしまいます。
添削お願いします。
[3.1]windows[3.2]bcc[3.3]C
302デフォルトの名無しさん:2005/09/19(月) 13:22:22
>>301
>>1
>・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
303デフォルトの名無しさん:2005/09/19(月) 13:39:54
ソース見ただけで適当に答えてみる。

printf("文字列を入力してください:");
fgets(st, 100, stdin);
printf("調べたい文字を入力してください:");
ch = getchar();
304デフォルトの名無しさん:2005/09/19(月) 13:53:17
文字を%dで出力してるけど、たぶん%cの間違い
あとは>>303の修正で良いと思う(or scanf("%s ",st))
305304:2005/09/19(月) 13:56:17
ミスった
×(or scanf("%s ",st)) 
○(or scanf(" %c",&ch))
306デフォルトの名無しさん:2005/09/19(月) 14:33:52
>>269
>{ -A , 0 , B , B+C , B+C+D}
>{ -A-B, -A, 0 , C , C+D} を生成している罠。
実際生成していないんだが、ソース読んでるか?
307デフォルトの名無しさん:2005/09/19(月) 20:33:27
>>305 それだと、int chも変更せんとな。
308デフォルトの名無しさん:2005/09/19(月) 23:18:11
scanf がstdinの最後の\nを読み残してるんだろうなぁ。
多分>>303で正解。
309デフォルトの名無しさん:2005/09/20(火) 00:23:14
[1] 授業単元: C言語講座
[2] 問題文: 縦横100×100で8ビット256色のBMPファイルを読みこみ、1ピクセルあたりの画素値を
        CSVファイルにBMPの画像のように同じ様に書きこめ。
[3] 環境
 [3.1] OS: Windows2000
 [3.2] コンパイラ名とバージョン: VC++
 [3.3] 言語: C言語
[4] 期限: [無期限]
[5] その他の制限: BMPのヘッダーを構造体に入れてから画素値を取り出しなさい。また2次元配列を使いなさい。

以前同じ質問をしたのですがいまだに解き方がわからないので再度質問させてください。
freadで一行分のピクセルデータから1バイトずつ抜き出していく方法を考えているのですが、これをどう0〜256の
画素値にするのかがわかりません。
ビットマップのピクセルデータをどう扱うか、また1ピクセルごとにどうファイルから読んで二次元配列に入れていくのか
という根本的なところが理解できていないのが解らない原因ですが、どうかご教授ください。
310デフォルトの名無しさん:2005/09/20(火) 00:32:31
>>306
ソースを見直してようやく分かった。
sums[i]要素を削除するremove_lt()で処理してるんだな。
まあ、このスレに助け求めている人間があんなコードを渡されても…という感は否めないがw

>>309
そもそも主がどこまでやったかわからん。晒せ。
311デフォルトの名無しさん:2005/09/20(火) 00:41:18
ttp://www.kk.iij4u.or.jp/~kondo/bmp/index.html

参考になればいいが、
8bitなら2^8=256個、赤、青、緑の色情報を格納する構造体を宣言する。
(構造体でなくとも、long int型でもいい)

画像からカラーパレット情報を読み出したら、上の構造体に保存しておく。
画像からイメージ情報を読み出したら、カラーパレット番号に対する色情報を出力する。
(long int型を使ったら、表示するときに色成分を分ける)

こんな感じか...
とりあえずカラーパレット一覧をCVSにするプログラムを作るのが先か。
312デフォルトの名無しさん:2005/09/20(火) 00:42:50
Concurrent Versions System
313309:2005/09/20(火) 00:58:29
ほとんど出来ていないんです。ちょっと間を空けてしまったせいもあるのですが、
画像ファイルからのデータの抜き出しという考え方が頭の中でイメージできなくて。
テキストファイルだと一文字や一列づつ読み込むと言うのは解るのですが、ビットマップは1マスずつの扱い方が
どうも理解が出来ないんです。
Cを初めて全然たっていないんですがポインタと配列の関係でもつまづくくらい覚えが悪いんです。
314デフォルトの名無しさん:2005/09/20(火) 01:36:49
[1] 授業単元: 画像処理
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/931.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/930.txt
[3] 環境
 [3.1] OS: /Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: [9/20 17:00]
[5] その他の制限:
931がcommon.inc.cです。930のインクルードに書いてあるcommon.inc.cです。

./a.out 930 common.inc.c -lm
でコンパイルします。
で、common.inc.cの

/* コードブックサイズ */
//#define CODEBOOK_SIZE 256
#define CODEBOOK_SIZE 2048
/* コードブックモード */
//#define CODEBOOK_RGB
#define CODEBOOK_YUV

のところで、#define CODEBOOK_RGBをコメントアウトして#define CODEBOOK_YUV
を有効にしてしまうとエラーが出てしまいます。逆の場合(RGBを有効、YUVをコメントアウト)はでません。
どうか解決をお願いいたします。
315デフォルトの名無しさん:2005/09/20(火) 01:38:36
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
316デフォルトの名無しさん:2005/09/20(火) 01:39:45
ポインタとか配列の考えが必要なので、なんとも・・・。

ところで・・・・C言語講座じゃないでしょ?
ホントのところは、なんなのさ。
317デフォルトの名無しさん:2005/09/20(火) 01:41:49
>>309 をみて >>314の再来と思っていたら、本人が来た。
318314:2005/09/20(火) 01:49:49
エラー文を晴らせていただきます

In file included from makecodebook.c:8:
common.inc.c: In function `colorrgb2coloryuv':
common.inc.c:188: parse error before `unsigned'
common.inc.c:192: `coloryuv' undeclared (first use in this
function)
common.inc.c:192: (Each undeclared identifier is reported
only once
common.inc.c:192: for each function it appears in.)

よろしくお願いいたします
319デフォルトの名無しさん:2005/09/20(火) 02:07:55
>>314 コンパイルオプションに-std=c99を追加すればいいんじゃないかと、推測してみる。
俺はc89でしか書かんが。
320デフォルトの名無しさん:2005/09/20(火) 02:50:54
関数冒頭で変数宣言してないからだな。defineのコメントアウトで
エラーのあるなしが変わるのはコンパイル前処理で#ifdefが無くなるから。
321デフォルトの名無しさん:2005/09/20(火) 03:28:55
>>319
ありがとうございます。
gcc ファイル名 -lm -std=c99
ということでしょうか?

>>320
> 関数冒頭で変数宣言してないからだな。defineのコメントアウトで
> エラーのあるなしが変わるのはコンパイル前処理で#ifdefが無くなるから。
ありがとうございます。
176行目で、
UINT32 coloryuv;
とすればよろしいのでしょうか?

322デフォルトの名無しさん:2005/09/20(火) 03:48:29
>>314
宿題の内容とは全く関係ないが、
common.inc.cをインクルードしてるのがちょっとな・・・
実行ファイル名がa.outなのもどうかと。

そろそろMakefile作ってソース構成まとめたほうがいいんでない?
(構成例)
 common.h :共通定義
 common.c :共通ソース
 codebook.c :コードブック作成処理
 encode.c :エンコード処理
 decode.c :デコード処理
 Makefile :以下の実行形式ファイルを生成
       → codebook(コードブック作成)
       → encode(エンコード)
       → decode(デコード)

この辺は人それぞれだから、別に強制するわけではないけどね。
323デフォルトの名無しさん:2005/09/20(火) 04:06:23
>>322 同意。

>321
すこしは自分でやるとか調べるとかしようよ。
Linuxからでもネットはできるんだからさ。

>gcc ファイル名 -lm -std=c99
>ということでしょうか?

実際にやってみてどうでしたか?
コンパイルオプションを調べましたか?

>176行目で、
>UINT32 coloryuv;
>とすればよろしいのでしょうか?

実際にやってみてどうでしたか?
エラーは出なくなりましたか?
324デフォルトの名無しさん:2005/09/20(火) 04:13:21
>>322
ありがとうございます。できればやってみようと思います。

>>323
ありがとうございます。
実際にやってみたのですがだめでした。
コンパイルオプションについて調べてみました。
http://okuyama.mt.tama.hosei.ac.jp/unix/C/slide05-1.html
ここを参考にして身ました。

UINT32 coloryuv.c;
をやってみました。エラーは減ったのですがやはりだめでした。
In file included from makecodebook.c:8:
common.inc.c: In function `colorrgb2coloryuv':
common.inc.c:189: parse error before `unsigned'

170行目で、UINT32 colorrgb ,UINT32 coloryuv
にしてみましたがこれまただめでした。

知り合いの環境だといままでやったことを何もせずともコンパイルが通ったそうです。
325デフォルトの名無しさん:2005/09/20(火) 04:19:37
段落ごとに。

-mはリンカオプションなんで最後に書くけど、コンパイルオプションは最初に書くべきでしょうね。
参考にしたというページの例でもそうなってますね。

変数の宣言を2回してませんか?

知り合いの環境で動くなら知り合いの環境で組むのがいいでしょうね。
326デフォルトの名無しさん:2005/09/20(火) 04:24:34
>>325
ありがとうございます。
ggc -ostd=c99 ファイル名 -lm を実行しましたがだめでした

変数の宣言を二回しています。
ということは170行目で宣言してはいけないということですよね?
知り合いの環境では動きました。ということは新たに加えて宣言してはいけないようなプログラムだと
いうことですか?

知り合いは遠くの人なので何度も実行結果を送ってもらうわけにはいかないので
なんとかしたいです。
327デフォルトの名無しさん:2005/09/20(火) 04:34:30
>>326
・知り合いが面倒なので適当に出来たとだけ言っている
・知り合いがなにか修正したり、コンパイル時に何かしてるのに報告してない
・あなたが知り合いをでっち上げている

どれだろうね。
328314:2005/09/20(火) 04:34:48
知り合いの環境では動くということは何か環境の問題だと思うのですが
何か思い当たるようなことはないでしょうか?
どうかよろしくお願いいたします
329デフォルトの名無しさん:2005/09/20(火) 04:35:58
その知り合いさんの環境とコンパイル方法がわからんとなんとも・・・・。
330314:2005/09/20(火) 04:37:28
>>327
ありがとうございます。
どれもないかとおもいます。というのはRGBの場合だと問題ないのに
YUVだと問題があるということから真ん中は消えます。
(RGBとYUVでコンパイル時に別のことはしていない)
一番上は、実際に処理ファイルを送ってもらったことや、信頼できるやつなので違うと思います
一番下は違います。
331デフォルトの名無しさん:2005/09/20(火) 04:38:27
環境は linux gcc です。
細かいことは聞いてないのでわかりません(もう寝てしまった・・・)

コンパイル方法は
gcc ファイル名 -lm
です。
332デフォルトの名無しさん:2005/09/20(火) 04:39:23
どなたかリナックスをお持ちの方で実際にコンパイルしていただけないでしょうか?
333デフォルトの名無しさん:2005/09/20(火) 04:40:09
C99デフォな奴なのかなぁ・・・。
gcc -std=c99 ファイル名 -lm
でどんな?
334デフォルトの名無しさん:2005/09/20(火) 04:44:02
>>333
ありがとうございます。
gcc -std=c99 makecode.c -lm
をすると -std=c99 を抜かしてコンパイルしたのと同様にしたのようなえらーがでました

In file included from makecodebook.c:8:
common.inc.c: In function `colorrgb2coloryuv':
common.inc.c:188: parse error before `unsigned'
common.inc.c:192: `coloryuv' undeclared (first use in this
function)
common.inc.c:192: (Each undeclared identifier is reported
only once
common.inc.c:192: for each function it appears in.)
335デフォルトの名無しさん:2005/09/20(火) 05:06:38
>>303>>304>>305>>307>>308
お礼遅くなってしまって申し訳ありません。
303のやり方で上手くいきました。
ご親切にどうもありがとうございました。

>>302
ご指摘ありがとうございます。
以後気を付けます。
336デフォルトの名無しさん:2005/09/20(火) 05:53:43
>>334 結構助言があるみたいだが・・・。
upしたり、知人に送ったファイルと、コンパイルしているファイルが違うとかな・・・まさか、そんなオチは嫌だぞ。
検証方法:
・ファイルをダウンロードしてコンパイル
・知り合いをはたき起こして送ったファイルを送り返してもらってコンパイル
検証結果報告待つ
337デフォルトの名無しさん:2005/09/20(火) 06:44:18
>>336
ありがとうございます。
今まで私が出来うる限りのことをしていました。
しぐうぃんでやってみるという方法を思いつき、やってみたところ成功いたしました。
linux gcc ではならなかったのですが、自分では原因がどうしてもわかりません。

知人の環境を詳しく聞いてみたいと思います。

338314:2005/09/20(火) 07:13:40
やはり知人のかんきょう、そしてCgwinでコンパイルが通ったという事実と
Linuxの場合だとコンパイルが通らなかったという事実からみちびかれるのは
gccのバージョンですか?
最近十分に寝て無くって頭がおかしくなってきて何かいてるかも少しおかしいですが
よろしくお願いします
339デフォルトの名無しさん:2005/09/20(火) 07:46:53
大丈夫、もともとおかしいのだろうから。
340デフォルトの名無しさん:2005/09/20(火) 14:22:16
>>338 gccのバージョンですか?
そうやって気づいたのなら、自分で試してみるといいよ。
341デフォルトの名無しさん:2005/09/20(火) 22:50:13
結局脳内知人の環境については語らずじまいですか?
342デフォルトの名無しさん:2005/09/20(火) 23:12:18
質問でつ。
1)>>338 って何者でしょうか?
2)同僚に彼みたいなのが来たらどうしますか?
343デフォルトの名無しさん:2005/09/20(火) 23:49:24
>>342
質問は>>1に従ってやってください。でないと嵐と見なされ放置されます。
344デフォルトの名無しさん:2005/09/21(水) 00:02:58
荒らしのつもりだったんだろう。
荒れる上に脱力だねぇ。
345314:2005/09/21(水) 00:42:32
みなさんありがとうございます。
すみません。荒らすつもりはありません。
知人の環境は
OS:KNOPPIX 3.9 コンパイラ:gcc (GCC) 3.3.6 (Debian 1:3.3.6-5) です。

私の環境は OS:Vine Linux 2.6r3 コンパイラ:gcc version 2.95.3 です。
これだとコンパイルが通りませんでした。

しかし、WINDOWSXP、Cygwinのgcc versionは3.4.4(Cygwin special)だと
コンパイルが通りました。

おそらくコンパイラのバージョンが問題だということまではわかったのですが解決方法が
わからず、困っております。
コンパイルオプションに-std=gnu89(gcc 3.3.6でのデフォルトです)をつけてみたりもしたのですが
だめでした。
346デフォルトの名無しさん:2005/09/21(水) 00:57:26
>>314
知人の環境を Vine Linux 2.6r3 にバージョンダウンしてもらって、
知人の環境でもコンパイルエラーがでるようにしてもらい、
その上で単なるバージョンが古いと出るエラーに
不毛な対処法を考えてもらい手とり足とり教えてもらうのがベストかなぁ……
347デフォルトの名無しさん:2005/09/21(水) 01:20:50
文字コード、って事は内科...
348デフォルトの名無しさん:2005/09/21(水) 01:32:46
2.95.3はC99に対応しとらんだろ。
まあ・・・素直にC89(C90)で通るソースを書くほーがマシだな。
-ansi -Wallで文句いわれないソースにすればよろしい。
349デフォルトの名無しさん:2005/09/21(水) 01:39:57
>>346
ありがとうございます。
さすがにそこまではたのめないので・・・

>>347
RGBだと大丈夫だったのでそれはないかな?と自分では思っております。

>>348
ありがとうございます。
コンパイルオプションに-std=c89をつけて両方の環境(知人と私の環境)でコンパイルが通るようにするべきかなと
言われました。
350デフォルトの名無しさん:2005/09/21(水) 01:44:39
えーっと。俺、日本語の読解力ないのでしょうか。
349が何をしたいのか、ここの回答者に何をさせたいのか、さっぱりわからんのですが。
351デフォルトの名無しさん:2005/09/21(水) 01:50:12
Vine 2.6r3 にもし wine が入っていたら、それを利用して
Cygwin をインストールするというのはどうだろうか?
352デフォルトの名無しさん:2005/09/21(水) 01:53:28
>>350
ありがとうございます。
昨日みなさんに質問し、さまざまなことを試すことである程度の解決を図ることができたので
報告、そしてもっといい解決方法があれば教えていただきたいという意味で書き込みを
させていただいております。

>>351
ありがとうございます。
wineというのがよくわからないのですが、後日その方法についても調べてみます。
353デフォルトの名無しさん:2005/09/21(水) 01:59:46
common.inc.cの176行目に
UINT32 coloryuv;
を入れて188行目(↑の変更前の行数)を
変更前> UINT32 coloryuv = (UINT32) ai << 16
変更後> coloryuv = (UINT32) ai << 16
と変更。多分>>322ではこの変更をしてない。

あとは-Wallを片付けるならメインのファイル(930.txt)の90行目
変更前> fprintf(fp_o," %3d, %08X, %3d\n",i , tmp_hist->coloryuv, tmp_hist->count);
変更後> fprintf(fp_o," %3d, %08lX, %3ld\n",i , tmp_hist->coloryuv, tmp_hist->count);
と変更。

これでこの話題終了。
354デフォルトの名無しさん:2005/09/21(水) 02:01:01
(´・ω・`)ショボーンアンカーミス。 >>322>>324
355デフォルトの名無しさん:2005/09/21(水) 02:10:15
>>353
ありがとうございます。
早速学校に試そうと思います。

直すべきところは
common.inc.cの176行目に
UINT32 coloryuv;
を入れて188行目(↑の変更前の行数)を
変更前> UINT32 coloryuv = (UINT32) ai << 16
変更後> coloryuv = (UINT32) ai << 16

あとは-Wallを片付けるならメインのファイル(930.txt)の90行目
変更前> fprintf(fp_o," %3d, %08X, %3d\n",i , tmp_hist->coloryuv, tmp_hist->count);
変更後> fprintf(fp_o," %3d, %08lX, %3ld\n",i , tmp_hist->coloryuv, tmp_hist->count);
と変更。

とこの二つを変更すればよろしいのでしょうか? -Wallを片付けるならという意味がよくわからなかったもので。
356デフォルトの名無しさん:2005/09/21(水) 02:17:56
>早速学校に試そうと思います。
日本語が分かりません。
学校「で」試す必要ないでしょーが。
自宅にLinux環境あるんでしょ?
357デフォルトの名無しさん:2005/09/21(水) 02:25:27
せんせー、-ansiを入れると死ぬほどエラー出るんすけど・・・。
エレガントな修正法をおしえてつかーさい。
358デフォルトの名無しさん:2005/09/21(水) 02:49:31
>エレガントな修正法

作り直し
359デフォルトの名無しさん:2005/09/21(水) 02:57:38
ら・・・らじゃー。<作り直し

まあ、いいか。俺のじゃないし、依頼も受けてないから、放置しとこう。
360デフォルトの名無しさん:2005/09/21(水) 03:07:07
>>356
学校にいろんなデータをおいてきてしまったので、学校に行かなくてはだめでした

>>359
できれば、エラーがでないように作り直していただきたいなと思います。。。
361デフォルトの名無しさん:2005/09/21(水) 03:18:00
まず、ここを直せよ...

/* RGBαベクトル値からYUVαベクトル値を取得 */
UINT32 colorrgb2coloryuv(
UINT32 colorrgb
)
{
 :
362361:2005/09/21(水) 03:27:50
>361
そこじゃよくわからんぞw

>353の指摘ってことだ
363デフォルトの名無しさん:2005/09/21(水) 03:30:49
>>350
大丈夫、きっとみんな理解できてない
ソースとレスの端々の単語から推測しているだけさ
そして、詳しい説明を求めても、無駄だということを確信しているんだ
364デフォルトの名無しさん:2005/09/21(水) 03:31:19
ら・・・らじゃぁ・・・<エラーがでないように作り直していただきたいなと思います。
ふむふむ>362
365デフォルトの名無しさん:2005/09/21(水) 03:36:04
common.inc.cの176行目に
UINT32 coloryuv;
を入れて188行目(↑の変更前の行数)を
変更前> UINT32 coloryuv = (UINT32) ai << 16
変更後> coloryuv = (UINT32) ai << 16

にすることでエラーがなくなりました。ありがとうございました。

しかし、これはCB作成だけのプログラムで、エンコートのプログラムをコンパイルしたら
これまたエラーが出ました。デコードのプログラムではエラーは出ませんでした。
新たにエンコードのプログラムをアップしてもよろしいでしょうか?
添削していただけないでしょうか?
どうかよろしくお願いいたします。

>>364
ありがとうございます
366デフォルトの名無しさん:2005/09/21(水) 03:46:32
> 新たにエンコードのプログラムをアップしてもよろしいでしょうか?

俺としては、やめて欲しいな。
367デフォルトの名無しさん:2005/09/21(水) 03:46:59
[1] 授業単元:
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/931.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/932.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 2.95.3
 [3.3] 言語: C
[4] 期限: [2005y年9月21日17:00まで]
[5] その他の制限: 何度もご迷惑をおかけして申し訳ないです。

368デフォルトの名無しさん:2005/09/21(水) 03:47:48
>>366
すいません・・・。

コンパイル方法は gcc 932.c -lm
です。
369367:2005/09/21(水) 03:49:01
エラー文を張り忘れましたすいません。

encode.c: In function `main':
encode.c:102: parse error before `int'
encode.c:117: `found' undeclared (first use in this
function)
encode.c:117: (Each undeclared identifier is reported only
once
encode.c:117: for each function it appears in.)

370デフォルトの名無しさん:2005/09/21(水) 03:50:12
あ、ansiって事は // コメントがダメじゃん...って今頃 orz
371デフォルトの名無しさん:2005/09/21(水) 03:56:56
>>369
このエラー英語で書いてあるから辞書とかひけない奴には
絶対理解不能なんじゃないかなぁ……
少なくとも小学生が読めるようなものじゃないと思う。
372367:2005/09/21(水) 03:57:12
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/932.txt
の87行目に
int found;
で、
102行目(訂正前)の
int found = FALSE;

found = FALSE;

にしたらエラーが消えました。皆様の助言のおかげです。ありがとうございます。
さっそく無事にすべてできるかどうか試してみます
373デフォルトの名無しさん:2005/09/21(水) 04:01:33
>369
そのソースの意図に従ってコンパイルを通すだけでいいなら

・103行目
/* int found = FALSE; */

・118行目
if(1){


ってすればいい。
でもやりたい事は違うと思うけどなw
374デフォルトの名無しさん:2005/09/21(水) 04:04:12
ありがとうございます。
いろんな実行をした結果、Cgwinででたとおりの結果になりました。
ありがとうございます。大変助かりました。
375デフォルトの名無しさん:2005/09/21(水) 13:32:18
質問です。
VC++を利用しているものですが、
あるボタンを4回クリックして、1回目から2回目クリックまでの時間、
2回目から3回目クリックまでの時間、3回目から4回目クリックまでの時間の
平均時間を計測したいのですが、どのような方法をとればよいのでしょうか。

ご教授お願いします。
376デフォルトの名無しさん:2005/09/21(水) 13:41:45
>>375
WM_LBUTTONUPが来た時点でWinProcにstatic宣言でもした変数に
時間入れて、なんらかのフラグセット
2回目のが来たらフラグがあるかどうか見て、あったらその時の時間と
1回目で保存した時間とを比較で間隔出せるんじゃまいか?
377デフォルトの名無しさん:2005/09/21(水) 13:59:33
378デフォルトの名無しさん:2005/09/21(水) 14:13:45
@アルゴリズム演習U
A配列に入ってる整数形のデータのうち、偶数があれば削除して、
 前につめる関数、あいた部分には0を入れる
del_gusuu(int data[],int size)を使用。(サイズsizeの配列)
Bビジュアルスダジオ/c++
C21日(本日中・・・できるなら今!w)
どなたか助けてください。。。お願いしますm(__)m 
379375:2005/09/21(水) 14:19:36
早々のレスありがとうございます。
説明不足で申し訳ないのですが、ボタンをタップすることでの音楽のテンポの測定を
したいと考えているので、
秒単位ではなくmsでの計測をしたいです。
380デフォルトの名無しさん:2005/09/21(水) 14:27:23
>>378
void del_gusuu(int data[], int size)
{
  int *p = data;
  for (int i=0; i<size; i++) {
    if (data[i] && (data[i] & 1)) {
      *p++ = data[i];
    }
  }
  while (p != (data+size))
    *p++ = 0;
}
381380:2005/09/21(水) 14:28:48
0も含めてしまったorz
if (data[i] && (data[i] & 1)) {

if (!data[i] || (data[i] & 1)) {
382デフォルトの名無しさん:2005/09/21(水) 14:32:52
>>379
ms単位で時間を取得すればいいだろうに。
GetTickCountでもマルチメディアタイマーでも好きなものを使えばいい
383デフォルトの名無しさん:2005/09/21(水) 14:39:08
>>380-381
if (data[i] & 1)で十分だろ。
384デフォルトの名無しさん:2005/09/21(水) 14:39:58
>>383
0も偶数扱いになるのを避けてるんじゃない?
385デフォルトの名無しさん:2005/09/21(水) 14:42:51
0も偶数でいいんじゃねーの?
386デフォルトの名無しさん:2005/09/21(水) 14:43:58
質問者が適宜判断ということで
387378:2005/09/21(水) 14:45:48
そうそうのカキコありがとうございます。
えとたしか授業では0も偶数でやってましたです。
388375:2005/09/21(水) 14:49:33
解決しました!ありがとうございます。
389デフォルトの名無しさん:2005/09/21(水) 14:52:21
>>387
じゃあ>>380>>383で。
390378:2005/09/21(水) 14:54:51
せんせーい></
まだできませーん。。。
391デフォルトの名無しさん:2005/09/21(水) 14:57:27
どうできないのか
392378:2005/09/21(水) 14:58:17
メイン関数がよくわからんとです。
393デフォルトの名無しさん:2005/09/21(水) 14:58:48
>>392
は?
394デフォルトの名無しさん:2005/09/21(水) 15:00:25
ワロタ
関数だけじゃないのかYO
395378:2005/09/21(水) 15:00:39
380の続きをどうやれば完成なのでしょうか?
396デフォルトの名無しさん:2005/09/21(水) 15:02:46
ならmainのスケルトンに配列宣言+初期化と関数呼び出し・配列表示を書けばいいだろ
397デフォルトの名無しさん:2005/09/21(水) 15:07:53
>>395
#include <iostream>
#include <iterator>
using namespace std;

// ここに>>380,383

int main()
{
  int array[] = {1,2,3,4,5,6,7,8,9,10};
  int size = sizeof(array)/sizeof(int);
  del_gusuu(array, size);
  copy(array, array+size, ostream_iterator<int>(cout, " "));
  return 0;
}
398378:2005/09/21(水) 15:19:51
ご親切にほんとありがとうございます。


でもビルドすると72件のエラーが。。。
0×40の文字は認識できませんってでるのですが・・・・
いったいどうすればいいんですか??
ばかでもうしわけない。
399デフォルトの名無しさん:2005/09/21(水) 15:20:22
>>398
そう来るとは思ってたが・・・
全角スペースを全部半角スペースかタブに置き換えれ。
400デフォルトの名無しさん:2005/09/21(水) 15:24:24
>>399
おいおい、そう来ると思ったなら次からは&nbsp;にしようよ。
401デフォルトの名無しさん:2005/09/21(水) 15:25:35
>>389 これでいいはず。インデントは自分でよろしく
#include <iostream>
#include <iterator>
void del_gusuu(int data[], int size)
{
  int *p = data;
  for (int i=0; i<size; i++)
    if(data[i] & 1) *p++ = data[i];
  while (p != (data+size)) *p++ = 0;
}
int main()
{
  int array[] = {1,2,3,4,5,6,7,8,9,10}; int size = sizeof(array)/sizeof(int);
  del_gusuu(array, size);
  std::copy(array, array+size, std::ostream_iterator<int>(cout, " "));return 0;
}
402378:2005/09/21(水) 15:26:55
でけたーー
ほんとうにありがとうございました。
これで宿題提出して帰れます。
ありがとうございました。
403デフォルトの名無しさん:2005/09/21(水) 15:30:42
うちのような低レベル大学じゃostream_iteratorなんて使ったら教授からツッコミが来そうだな・・・
404デフォルトの名無しさん:2005/09/21(水) 16:35:42
>>403
そこをいかに突っ込み返すかが大事だ。
405デフォルトの名無しさん:2005/09/21(水) 16:44:54
iteratorとか言う以前に、ビジュアルスダジオとかいってる奴にしては
del_guusuが綺麗すぎるだろw
406デフォルトの名無しさん:2005/09/21(水) 17:08:24
>>405
初心者でも、あれ位なら大丈夫だろ。
むしろ こういう関数を書いて反応を見たいw
void del_gusuu(int data[], int size){
    std::fill(std::remove_if(data,data+size,std::not1(std::bind2nd(std::modulus<int>(),2))),data+size,0);
}
407デフォルトの名無しさん:2005/09/21(水) 17:14:36
>>406
俺はC++まだほとんどやってないが、とりあえずSTLをふんだんに使ってるということは分かった
408デフォルトの名無しさん:2005/09/21(水) 17:32:49
>>407
いい読みだな。未経験者の割には、
俺の周りにいる奴ら(俺含む)よりはできるな。やらないか?
409デフォルトの名無しさん:2005/09/21(水) 17:48:37
>>408
ウホッ!いい男・・・



まぁ冗談はおいといて、やってないとはいっても独習を関数のオーバーロード辺りまでは
読み進めたし、C++にはSTLという大層便利な物があるってことぐらいは知ってたからな
410デフォルトの名無しさん:2005/09/21(水) 18:17:10
[2] 問題文(含コード&リンク):

struct pair { int a; int b;};
void f(struct pair **s){ s[1]->a=100; }
main(){
struct pair *A[10];
struct pair B;
B.a=50;
A[1]=&B;
f(A);
printf("%d",A[1]->a);
}

2行目の**は何でしょうか?
ちなみに今、ポインタ等を勉強中です。
*は間接参照演算子というらしいのですが**が解りません。
よろしくお願いします。
411デフォルトの名無しさん:2005/09/21(水) 18:19:17
>>410
スレ違い。
が、一応書くと struct pairへのポインタへのポインタ
412デフォルトの名無しさん:2005/09/21(水) 18:36:32
>>410
次からはCの質問スレな
んで、アスタリスクの意味を知ってるならそれが2つ重なってるだけ
A→Bという関係なら、*AでBが参照できるわけだが、
A→B→Cとなってるなら、**AでCが見れる
413410:2005/09/21(水) 18:39:09
>>411-412
ありがとうございました。
414デフォルトの名無しさん:2005/09/22(木) 19:36:54
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク):課題:ビット演算子
(1)サブネットマスクを入力し、そのネットワークで使用できるホストの最大数を求めるプログラム。
(2)32ビットのパターンを表示する関数を作成して、それを呼び出して実行するプログラム。
(3)32ビットのデータを指定数だけ左にシフトする関数を作成し、それを呼び出して実行するプログラム。
 ※(2)で作成した関数によりビットパターンを表示。
  左シフトであふれた分は下から入れる。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: 9月23日0:00

教科書等を見たのですが、理解できませんでした。
ご指導お願いします。
415デフォルトの名無しさん:2005/09/22(木) 21:55:25
(1)えーっと、0と最大は特別扱いするんだっけ?<ネットマスク
(2)ビットのパターンを表示って2進数表記ってことでしょうか?
416デフォルトの名無しさん:2005/09/22(木) 22:01:58
#include <stdio.h>

int main()
{
unsigned char array[4] = {0, 0, 0, 0};
unsigned long mask = 0;
int i;
printf("サブネットマスクを入力(例 : 255.255.255.0)\n");
printf("->");
scanf("%u.%u.%u.%u", &array[0], &array[1], &array[2], &array[3]);
for(i = 0; i < 4; i++){
mask = mask << 8;
mask = mask | array[i];
}
mask ^= 0xFFFFFFFF;// ノード数
mask -= 2;// 使用不可アドレス
printf("%u", mask);
return 0;
}
417デフォルトの名無しさん:2005/09/22(木) 22:10:44
#include<stdio.h>
void showBits(int value){
    int index = 32;
    do putchar('0'+(value>>--index&1));while(index);
}
unsigned shiftLeft(unsigned value,unsigned shift){
    if(shift >= 32)return 0;
    else return value << shift;
}
int main(){
    showBits(shiftLeft(1,3));
}
418デフォルトの名無しさん:2005/09/22(木) 22:14:16
すまんよく見直すと回転シフトなのね......
unsigned shiftLeft(unsigned value,unsigned shift){
    return value << shift|value>>32-shift;
}
419デフォルトの名無しさん:2005/09/22(木) 23:56:25
>unsigned char array[4] = {0, 0, 0, 0};
>scanf("%u.%u.%u.%u", &array[0], &array[1], &array[2], &array[3]);
再提出
420414:2005/09/23(金) 00:03:58
>>416-419

ありがとうございます。
訂正の分も提出できました(`・ω・´)
421419:2005/09/23(金) 03:00:50
単に誤ってるということを指摘しただけで何も訂正してないんだが…直したんだろう、きっと。
422デフォルトの名無しさん:2005/09/23(金) 09:17:57
>>421
ありゃま
423416:2005/09/23(金) 12:12:48
>>419
正解は?
424デフォルトの名無しさん:2005/09/23(金) 12:24:33
unsigned
425デフォルトの名無しさん:2005/09/23(金) 14:23:39
[1] 授業単元: データ構造とアルゴリズム
[2] 問題文(含コード&リンク):
問題イ
名前、年齢を持つリストを作成し、その中から指定したkeyを検索し、
その後ろに新たなデータを挿入するプログラムを作成してください。
ただし、指定したkeyが見付からなかった場合は、リストの最後に挿入すること。
問題ロ
名前、年齢を持つリストを作成し、そのリストからあるデータを削除するプログラムを作成してください。

[3] 環境
 [3.1] OS: solaris
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C言語
[4] 期限: 9月30日
426デフォルトの名無しさん:2005/09/23(金) 14:50:52
keyが何なのかはっきりさせてください。
名前なのか年齢なのか。
427425:2005/09/23(金) 14:57:35
>>426さん
名前です。
はっきりせず申し訳ありません。
428デフォルトの名無しさん:2005/09/23(金) 15:55:17
>>425
やるだけやったけど、題意とり違えたりしてたら言ってくれ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/935.txt
429デフォルトの名無しさん:2005/09/24(土) 00:00:44
>>427
同姓同名以下略
430ageをあげかとおもたorz:2005/09/24(土) 15:01:17
struct node * new_node(const char * name, int age, struct node * next)
{
struct node * n = (struct node *) malloc(sizeof(struct node));

if (n == NULL)
{
fprintf(stderr, "Memory error.\n");
return NULL;
}

strncpy(n->name, name, sizeof(n->name) - 1);
n->name[sizeof(n->name) - 1] = '\0';

n->age = age;
n->next = next;

return n;
}
431デフォルトの名無しさん:2005/09/24(土) 15:13:23
insert_node と remove_node は keyを持つノードを見つける find_node を利用して作るとすっきりするとおもた
432デフォルトの名無しさん:2005/09/24(土) 15:51:33
>431
あとinsert_nodeには nextがNULLの香具師を見つける get_last_node とかも
433デフォルトの名無しさん:2005/09/24(土) 19:05:32
質問っす。

参加者N人がM人ずつで対戦する大会の日程を再帰を使わず、書け。とのお題。

例えば、N=6、M=2 のとき
1日目 1-2 3-4 5-6
2日目 1-3 2-5 4-6
3日目 1-4 2-6 3-5
4日目 1-5 2-4 3-6
5日目 1-6 2-3 4-5

さっぱりわかんねっす。
434デフォルトの名無しさん:2005/09/24(土) 19:09:21
435デフォルトの名無しさん:2005/09/24(土) 19:10:45
436デフォルトの名無しさん:2005/09/24(土) 19:24:47
433 です。失礼しました。

[1] 授業単元:ありません
[2] 問題文(含コード&リンク): >>433
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: ありません
 [3.3] 言語: C
[4] 期限:ありません
[5] その他の制限: 基本情報技術者試験を受けよかな?ぐらいな実力
437デフォルトの名無しさん:2005/09/24(土) 19:39:16
コンパイラも書けないんだったら違う道行った方がマシかと思われ
438433です:2005/09/24(土) 20:02:54
気が向いたとき、コード考えてる社会人です。
面白いお題もらったもので、考えたのですが、
自分には難しく、質問した次第です。
スレ違いのようですと、あきらめます。

コンパイラはこだわらないといいますか、違いがよくわかってません。
439デフォルトの名無しさん:2005/09/24(土) 20:25:36
適当に書いてみたけど最長の日数を素直に求める方法しかわからんかった。
スマートに書くにはどうすればいいんだろ
#include<stdio.h>
unsigned pop(unsigned x){
    x -= x>>1&0x55555555;x = (x&0x33333333) + (x>>2 & 0x33333333);
    x = x+(x>>4) & 0x0f0f0f0f;x = x + (x>>8);x = x + (x>>16);
    return x & 0x3F;
}
unsigned snoob(unsigned x){
    unsigned smallest = x & -x,ripple = x + smallest;
    return ripple | ~(-1<<(pop(x^ ripple)-2));
}
void show(unsigned N,unsigned M){
    unsigned n,bits,i;
    for(n=0,bits = (1<<M)-1;bits<(1<<N);bits=snoob(bits)){
        printf("%2d日目 %u",++n,pop((bits&-bits)-1)+1);
        for(i=bits&bits-1;i;i&=i-1)printf("-%u",pop((i&-i)-1)+1);
        printf("\n");
    }
}
int main(){show(6,2);}
440433です:2005/09/24(土) 20:38:13
ありがとございます。読むのにかなり時間がかかります。
ほんとうれしいっす。
441デフォルトの名無しさん:2005/09/24(土) 20:54:03
[1] C実習
[2] 最大10文字のchar型の配列に範囲を指定して文字列を置換していく。
  範囲n〜n2以下の文字列の場合は範囲末尾以降を前詰めし、
  範囲以上なら後ろにずらしていく。 '\n'は文字に含まず、
  '\n'のみ入力があった場合はその範囲内の文字列を削除して前詰めする。
  ずらす文字がオーバーフロウする場合は消していく。
[3] 環境
 [3.1] WindowsXP
 [3.2] BCC
 [3.3] C言語
[4] 期限:月曜まで
[5] その他の制限: 無し

削除、前詰めまでは出来たのですが、範囲以上の文字列の場合にずらしていく処理がうまくいきません。
よろしくお願いします。
442441:2005/09/24(土) 20:55:07
追記:ここで書いている範囲とは要素の事です。
443439:2005/09/24(土) 21:08:47
>>440
いや読んでもいいけどビット演算を平気で多用してるから理解は難しいかとw
一応読むのが非常に困難な場所だけ言っておくと、
popは受け取った整数の立っているbitの数を返す関数
snoobは受け取った整数の立っているbitの数が同じで元の数より大きい最小の数を返す関数
この2個の関数は書籍「ハッカーの楽しみ」のコードがベース

あとはshowで右Nbitの整数からMビット立っている全ての数を列挙して
その組み合わせを表示しているだけ。

#ただ一日に複数の試合が行う方法が思いつかなかったのが少し心残り
444デフォルトの名無しさん:2005/09/24(土) 21:56:38
なるほろれす。
いや、ほとんど理解できてませんが、なるほどです。
445デフォルトの名無しさん:2005/09/24(土) 22:32:04
すみません、お願いします_| ̄|○
[1] C言語特別講座
[2] 問題文
n!を求める関数factorialを再帰を用いて作成
/*nの階乗*/
#include<stdio.h>

intfactorial(int n)
{
if(n==0){
* *;
}
else{
* *;
}
}

void main(void)
{
int n;
printf("n->");
scanf("%d",&n);

printf("%dの階乗=%d\n",n,factorial(n));

}
**で囲まれてる部分がわかりません
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] VC 6.0
 [3.3] 言語: C++
[4] 期限: 明後日まで
446デフォルトの名無しさん:2005/09/24(土) 22:34:31
はいよ。

int factorial(int n)
{
    if(n==0){
        return 1;
    }
    else{
        return n * factorial(n-1);
    }
}

#末尾再帰にしたいなぁ……
447デフォルトの名無しさん:2005/09/24(土) 23:21:35
ありがとう。馬鹿でごめんね
勉強してくる
448デフォルトの名無しさん:2005/09/24(土) 23:52:27
>441
もちっと具体例キボンヌ
449433です:2005/09/25(日) 00:44:54
実は、再帰を使ってもできるかどうか・・・エヘヘッ
450441:2005/09/25(日) 00:48:14
buffer[11] = "ABCDEFGHIJ\0" の配列の要素[2]〜[3]に"WXYZ"を置換します。
範囲指定が2文字の所("CD"の箇所)に4文字の文字列(2文字多い)を置換するので
buffer[11] = "ABWXYZEFGH\0" となってE以降の文字列が2文字ずつズレていく(要素10は常に\0)といった感じです。
451デフォルトの名無しさん:2005/09/25(日) 01:05:37
char buffer[11] = "ABCDEFGHIJ";
char temp[11] = {0};
char* p;
char insert[] = "WXYZ";

int n, n2;

if((n2 - n) < strlen(insert)) {
strncpy(temp, buffer, head);
strcat(temp, insert);
p = &buffer[n2];
strncat(temp, buffer, strlen(p));
strcpy(buffer, temp);
}
452デフォルトの名無しさん:2005/09/25(日) 01:06:53
× strncpy(temp, buffer, head);
○ strncpy(temp, buffer, n);
453デフォルトの名無しさん:2005/09/25(日) 01:11:53
あー、微妙にnとn2の指定が間違ってるかも…
454デフォルトの名無しさん:2005/09/25(日) 01:16:47
しかもstrlen(p)じゃないorz
sizeof(temp) - strlen(temp) - 1か?
pいらね。もう間違いすぎ。おとなしく寝よう…。
455433です:2005/09/25(日) 01:18:16
お待ちくだされ!!
456デフォルトの名無しさん:2005/09/25(日) 01:19:04
orz
strncat(temp, p, sizeof(temp) - strlen(temp) -1);
457433です:2005/09/25(日) 01:29:25
やはり、そうでしたか。いやー、思い過ごしかと思ったんだけどね。
ヒント頂いたし、thx。
答える側になれるようがんばろっと。
458デフォルトの名無しさん:2005/09/25(日) 02:17:19
>>450
その場合、nは2でn2は4ということでいいのかな?
だとしたらこんな感じで。
void trunc(char * buffer, char * insert, unsigned n, unsigned n2)
{
char tmp[11];
strcpy(tmp, buffer);
sprintf(buffer, "%.*s%s%.*s", n, tmp, insert, strlen(tmp) - n - strlen(insert), tmp + n2);
}
459デフォルトの名無しさん:2005/09/25(日) 13:33:19
[1] プログラミング
[2] 問題文
#define N 8
for(i=0; i<N-1; i++)
{
k=0
for(j=0; j<=N-1; j++)
if(a[b]>a[j])k=j;
b[i]=a[k];
a[k]=9999;
}
bが完成したときaにはすべて999が入っている
以上を参考にし単純選択法のプログラムを完成せよ
ただし配列a[ ]にデータを読み込ませる部分は
int a[ ]={8,3,5,9,1,2,4,6};
としてもよい scanfを取り込んでもよい
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 9月27日
[5] その他の制限: 特に無し

よろしくお願いします
460デフォルトの名無しさん:2005/09/25(日) 13:45:09
>>458
sprintfってそんな使い方が出来たのか。知らんかった
461デフォルトの名無しさん:2005/09/25(日) 13:50:39
>>459
bってint型の配列だよな?
この部分あってる?なんか間違ってたりしない?
if(a[b]>a[j])k=j;
b[i]=a[k];
462デフォルトの名無しさん:2005/09/25(日) 14:06:55
>>461
問題文に間違いは無いようです
463デフォルトの名無しさん:2005/09/25(日) 14:17:11
>>450
awkのsubstrのようなもん?
464デフォルトの名無しさん:2005/09/25(日) 15:24:30
>a[k]=9999;
>aにはすべて999が入っている
>問題文に間違いは無いようです


うそつき
465デフォルトの名無しさん:2005/09/25(日) 15:31:03
if(a[k]>a[j])k=j;
a[i]=a[k];
だっとえむおー

toうそつき
466デフォルトの名無しさん:2005/09/25(日) 16:00:30
>a[b]
何か物凄いテクが使われているのかと思った。
467デフォルトの名無しさん:2005/09/25(日) 16:29:15
>scanfを取り込んでもよい
   ↑
で、じゃね?
468441:2005/09/26(月) 00:52:32
>451,458

報告遅れてすいません。参考にさせていただき、完成しました。
ありがとうございました。
469デフォルトの名無しさん:2005/09/26(月) 01:23:30
すいません・・・宿題でわからないとこがあるので質問します。。、

1から99までの奇数の和を求めるプログラムを、for文を用いて作成せよ。

おねがいしますm(__)m
470デフォルトの名無しさん:2005/09/26(月) 01:27:30
>>1すらも読めないのか
471デフォルトの名無しさん:2005/09/26(月) 01:28:39
>>469
for (i = 1, sum = 0 ; i < 100 ; i += 2) sum += i;
472デフォルトの名無しさん:2005/09/26(月) 01:42:12
[1] 前期、後期で2単位
[2] 469の問題
[3] C言語
[4] 期限:今日
[5] その他の制限: forだけで・・・
473デフォルトの名無しさん:2005/09/26(月) 01:43:25
474472:2005/09/26(月) 01:45:56
???
475デフォルトの名無しさん:2005/09/26(月) 01:46:59
???
476デフォルトの名無しさん:2005/09/26(月) 01:47:06
既に解答提示済み、ってこった
477472:2005/09/26(月) 01:48:46
sum+=i ってどうゆう意味ですか?
478デフォルトの名無しさん:2005/09/26(月) 01:49:29
sum+iをsumに入れる
479472:2005/09/26(月) 01:50:11
for ってどういう意味ですか?
480デフォルトの名無しさん:2005/09/26(月) 01:51:27
>>474
ネタであるといいのですが、それで分からないのが本当である場合、深刻です。
非常に易しくしましたのでこれで理解できるはずです。
#include <stdio.h>

int main (void)
{
int i, sum ;

sum = 0 ;
for (i = 1 ; i < 100 ; i = i + 2) sum = sum + i ;
printf ("%d", sum) ;

return 0 ;
}
481472:2005/09/26(月) 01:52:59
>>480
ネタじゃないですw
もうだめぽ…  今日テストっていうのに…
482デフォルトの名無しさん:2005/09/26(月) 01:54:38
forが和姦ねって事だよな?
>480 whileでやってやれよw
483デフォルトの名無しさん:2005/09/26(月) 01:56:14
>>482
出題の条件がforだからwhileにしちゃ不味いだろ
484472:2005/09/26(月) 01:56:38
>>482

472の制限を見てくださいね笑
485デフォルトの名無しさん:2005/09/26(月) 01:57:59
>483
いやだから説明するのに、って事だよw
解答は471でいいだろ?
486482:2005/09/26(月) 01:59:49
って、あれ?
あんただれ>484
487デフォルトの名無しさん:2005/09/26(月) 02:00:31
おそらく、>>472の教授はこの書き方は教えていないのでは。
488472:2005/09/26(月) 02:00:39
480さんが書いてくださったのがわかりやすいです
解答は先生からもらってませんorz
ありがとうございました。

もう2問質問してもいいですか?
489472:2005/09/26(月) 02:01:07
お前こそ誰なんだよ
490デフォルトの名無しさん:2005/09/26(月) 02:04:03
>>488
メンドクサイから2つまとめて書いてくれ
491デフォルトの名無しさん:2005/09/26(月) 02:04:21
とりあえず472は全員トリップつけてみようよ
492472:2005/09/26(月) 02:09:06
お願いします
1問目
キーボードから異なる3つの実数を入力されたとき、それらの中間値を
求めるようなプログラムを作成せよ。
(実行例)
3つの数字を入力して 1 2 3
2.000000

2問目
for文を用いて0から20までの4乗を表示するプログラムを作成せよ。

おねがいします・・・
493デフォルトの名無しさん:2005/09/26(月) 02:11:34
1.中間値って平均って事?

2.0から20までの4乗を表示って、0の4乗,1の4乗,...,20の4乗を表示って事?
494デフォルトの名無しさん:2005/09/26(月) 02:12:26
>>492
scanf ("%f %f %f", &i, &j, &k) ;
printf ("%f", (i + j + k) / 3.0F) ;
495デフォルトの名無しさん:2005/09/26(月) 02:15:37
>>492
1.はググったらあったよ情報科の教科書の問題?

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

scanf("%d %d %d", &a, &b, &c);
if((b > a && a > c) || (c > a && a > b))
printf("%d\n", a);
else if((a > b && b > c) || (c > b && b > a))
printf("%d\n", b);
else if((a > c && c > b) || (b > c && c > a))
printf("%d\n", c);
else
printf("中間値は無い。\n");
}
496472:2005/09/26(月) 02:16:32
>>493
1,違います。3つの数字を比べたときの真ん中の値です。
  例 12 4 8 だったら 8 が中間値です
2,そうです
497デフォルトの名無しさん:2005/09/26(月) 02:18:36
32bit環境の場合
for (i = 0 ; i <= 20 ; i++) printf ("%d ", i*i*i*i) ;
498デフォルトの名無しさん:2005/09/26(月) 02:19:53
>495
そーと、使っちゃいけないんだろうか?
問題の制限がよく分からんな
499デフォルトの名無しさん:2005/09/26(月) 02:21:47
>>498
"3つ数字aとbとcが有る時にa<b<cとなる数bが中間値"らしい
ソートして2つ目で良いね
500デフォルトの名無しさん:2005/09/26(月) 02:22:18
2.0から20までの4乗を表示
#include <stdio.h>
int main(void)
{
  int n;
  for( n = 0 ; n <= 20 ; n++ ) {
    printf("%d^4=%d\n", n, n*n*n*n);
  }
  return 0;
}
501デフォルトの名無しさん:2005/09/26(月) 02:23:04
>499
いや、 >495の情報によると
>printf("中間値は無い。\n");
状況があるそうなんだがw
502デフォルトの名無しさん:2005/09/26(月) 02:23:24
>>499
a≤b≤cだね。
503デフォルトの名無しさん:2005/09/26(月) 02:24:31
test
504デフォルトの名無しさん:2005/09/26(月) 02:24:33
>502
a・b・cになっとるぞ
505デフォルトの名無しさん:2005/09/26(月) 02:24:32
>>495
メジアンでググれ
506472:2005/09/26(月) 02:25:12
高専の電気科のテストの過去問です

ソートは使わないでくださいです。。。
507デフォルトの名無しさん:2005/09/26(月) 02:26:36
>>501
ごめん、>>495>>499も俺だ
ソートしたあとどれか2つ同じのがあれば中間値なしってやらなきゃいけないから真面目に比較したほうが楽だね
508デフォルトの名無しさん:2005/09/26(月) 02:31:06
#include <stdio.h>
#include <set>
int main(void)
{
int a,b,c;

scanf("%d %d %d", &a, &b, &c);
std::set<int> nums;
nums.insert(a);
nums.insert(b);
nums.insert(c);
if(nums.size() != 3){
printf("中間値は無い。\n");
}else{
std::set<int>::iterator itr;
itr = nums.begin();
itr++;
printf("%d\n", (*itr));
}
509デフォルトの名無しさん:2005/09/26(月) 02:32:18
>>505
メジアンは中央値だから違うだろ
510505:2005/09/26(月) 02:36:40
>>509
中間値==中央値じゃないか?
メジアンと中間値のペアでググると(ry
511デフォルトの名無しさん:2005/09/26(月) 02:37:48
>510
だって
>printf("中間値は無い。\n");
だぜw
512デフォルトの名無しさん:2005/09/26(月) 02:37:55
/* a, b, c 3要素のソート */
if (a > b)
tmp = a, a = b, b = tmp;
if (b > c) {
tmp = b, b = c, c = tmp;
if (a > b)
tmp = a, a = b, b = tmp;
}
中央値はb
513デフォルトの名無しさん:2005/09/26(月) 02:39:55
>512
中央値、はそうだねw
514505:2005/09/26(月) 02:41:10
>>511
いや、だから>>495の様な
藁ソースを書いているページの言う事を信じるなと
515デフォルトの名無しさん:2005/09/26(月) 02:46:16
ここはどれが答えとして適切なのかは472に判断してもらおう
516472:2005/09/26(月) 02:51:16
もまえらよく嫁
「異なる3つの実数」なんだなこれが
いいか「異なる」かつ「実数」だ

ちゃんと問題文を見てくださいです。。。
517デフォルトの名無しさん:2005/09/26(月) 02:52:55
んー?
ちゅうことは、同値チェックして(浮動小数点ではナンセンスな気もするが)、
同じ値があったら、再入力させんの?
518デフォルトの名無しさん:2005/09/26(月) 02:53:07
orz
519472:2005/09/26(月) 02:53:49
みなさんありがとうございます。
自分はまだ初心者で始めたばかりなので495さんのが
シンプルなような気がしてわかりやすいかなと思います。
とても参考になりました。質問してよかったです。ありがとうございました。
520デフォルトの名無しさん:2005/09/26(月) 02:56:17
495でいいのかよw
521495:2005/09/26(月) 03:00:57
わかったか能無しども。つまらん解答では満足できないんだよ俺は!
522デフォルトの名無しさん:2005/09/26(月) 03:03:32
明らかに偽者とわかる騙りは見てても微笑ましいなーw
523デフォルトの名無しさん:2005/09/26(月) 03:29:53
>>521
判りやすく俺を騙るなw
524デフォルトの名無しさん:2005/09/26(月) 03:34:20
んー。でもさ、回答者側が不備を突かれて荒れるというパターンはある気がするが。
質問者の偽者はめずらしいな。
525デフォルトの名無しさん:2005/09/26(月) 04:26:43
そんなことなくない?
単発質問スレ立てると2に1の偽者が自己解決しましたって書いたりするよ
526デフォルトの名無しさん:2005/09/26(月) 05:32:05
単発質問スレだから
527デフォルトの名無しさん:2005/09/26(月) 06:01:14
入力? abcdefghi

a b c d e f g h i
全部で9文字です
最初はa 最後はi

検索? d
dは4文字目
dは1個あります

↑のような出力になるように80文字の配列関数を使って作りなさい
ちょっとうろ覚えだけどこんな問題、?の後は文字入力で
お願いしまーす
528デフォルトの名無しさん:2005/09/26(月) 06:05:32
>>527
>>1
テンプレ無視も気になるがなんか言葉遣いからして人に物を頼む態度ではない気がする
まあ中にはルールも礼儀も関係ないって住人もいるんだろうからそのうち回答が来るだろうが
529デフォルトの名無しさん:2005/09/26(月) 06:16:11
配列関数ってなんだ?
530527:2005/09/26(月) 06:17:27
>>528
ごめんね、気楽な気分で頼んでしまったm(._.)m
よろしくお願いします

[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): >>527
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C言語
[4] 期限: 明日まで
[5] その他の制限: 80文字の配列関数を使って
531デフォルトの名無しさん:2005/09/26(月) 06:17:52
>>527
strlen, strchr
後は単純なループ

これだけあれば作れるだろ、ちゃんと聞けないなら自力でやれ
532527:2005/09/26(月) 06:19:45
>>529
char a[80]みたいな配列だと思う、問題文に配列関数って書いてあったからそのまま書いちゃった(´・ω・`)
533デフォルトの名無しさん:2005/09/26(月) 06:22:08
>>531
学校行く前に構成だけでも理解しときたかったの
ギリギリまで頑張ってみる、ありがと
534デフォルトの名無しさん:2005/09/26(月) 06:41:31
#include <stdio.h>
void main() {
char a[80];
char b;
char *c;
int i;

printf("入力? ");
fgets(a, 79, stdin);

printf("%s\n全部で%d文字です\n最初は%c 最後は%c\n\n", a, strlen(a), a[0], a[strlen(a) - 1]);
b = getchar();
for(i = 0; (c = strchr(a, b)) != NULL; i++) {
printf("%cは%d文字目\n", b, c - a);
}
printf("%cは%d個あります", b, i);
}
535デフォルトの名無しさん:2005/09/26(月) 06:45:48
あー、間違えてる。>>534をそのまま実行すると無限ループになるので真似しないように!
536デフォルトの名無しさん:2005/09/26(月) 06:47:42
>>534
それだと\nの分だけ長くでないか?
確かfgetsは改行文字も読み込んでくれたはずだが
537デフォルトの名無しさん:2005/09/26(月) 06:57:54
>>536
ああ、そういえばそうだったorz
それも間違いだな。。。
538デフォルトの名無しさん:2005/09/26(月) 06:58:07
#include <stdio.h>
#include <string.h>

int main(void)
{
char str[81], chr = 0, *pstr=str - 1;
int len, i;

printf("入力? ");
while (!fgets(str, 80, stdin));

len = strlen(str) - 1;
str[len] = '\0';
for (i=0;i<len;i++) {
printf("%c ", str[i]);
}
printf("\n全部で%d文字です\n最初は%c 最後は%c\n\n検索? ", len, str[0], str[len-1]);

while (chr = getchar()) {
if (isalpha(chr)) break;
printf("英字を入力してください ");
}

printf("%cは%d文字目\n", chr, strchr(str, chr) ? (strchr(str, chr)-str)/sizeof(char)+1 : 0);
for (i=-1;(pstr=strchr(pstr,chr)) != NULL; i++, pstr++);
printf("%cは%d個あります\n", chr, i);
}

とりあえず作ってみたがバグが隠れてるかも知れん
539デフォルトの名無しさん:2005/09/26(月) 06:59:58
>>538
書き忘れたけど、バッファ溢れは考慮してるが
入力文字が80文字を超えた場合の処理はしてない
そこは使用者の良心に任せるw
540デフォルトの名無しさん:2005/09/26(月) 07:05:33
>>538
おぉ、ありがとうございます
ためしにやってみたところちょっとバグがありましたが
なんとか自分で治せると思います
ありがとうございました〜
541デフォルトの名無しさん:2005/09/26(月) 07:08:10
>>527
#include <stdio.h>
#include <assert.h>

int search(char *input, char *keyword, int pos)
{
    assert(pos!=0);
    pos--;
    while (input[pos] != keyword[0])
    {
        pos++;
        if (!input[pos])
            return 0;
    }
    return pos+1;
}

int count(char *input)
{
    int src=input;
    while (*(++input));
    return input-src-1;
}

int main()
{
    char input[80];
    char keyword[80];
    int pos=0;
    int cntkeyword=0;
542デフォルトの名無しさん:2005/09/26(月) 07:08:42
>>541の続き
    printf("入力?");
    fgets(input, 80, stdin);
    printf("全部で%d文字です", count(input));
    printf("最初は%c 最後は%c\n", input[0], input[count(input)-1]);

    printf("検索?");
    fgets(keyword, 2, stdin);
    printf("%cは", keyword[0]);
    if (!(pos=search(input, keyword, pos+1)))
    {
        printf("ありません\n");
        return 0;
    }
    else
    {
        printf("%d", pos);
        cntkeyword++;
    }

    while (pos=search(input, keyword, pos+1))
    {
        printf(",%d", pos);
        cntkeyword++;
    }
    printf("文字目\n");
    printf("%cは%d文字あります\n", keyword[0], cntkeyword);

    return 0;
}
543デフォルトの名無しさん:2005/09/26(月) 07:08:59
>>540
やっぱりあったか・・・どんなバグだった?
whileの所を色々弄ってたからそこじゃないかと思うんだが
544デフォルトの名無しさん:2005/09/26(月) 07:11:51
>>543
printf("%cは%d個あります\n", chr, i);
のところで
入力?のところで打ち込んだ文字を入れると
0個
入れてない文字を入れると
-1個とでました
545デフォルトの名無しさん:2005/09/26(月) 07:17:36
>>544
おかしいな・・・入力文字列に存在しない文字を入れれば0になるはずだが
使ったデータは?
546デフォルトの名無しさん:2005/09/26(月) 07:20:33
>>545
C++ソースファイルで新規作成して
538のをそのままコピーして貼り付けしただけです(´・ω・`)
547デフォルトの名無しさん:2005/09/26(月) 07:22:02
>>546
いやそうじゃなくて、入力?と検索?の所でバグが出たときに使った値
548デフォルトの名無しさん:2005/09/26(月) 07:24:12
入力? abcdefg
a b c d e f g
全部で7文字です
最後はa 最後はg

検索 d
dは4文字目
dは0個あります
Press any key to continue
こんな感じです〜
abcdefg以外だと-1になる感じです
549デフォルトの名無しさん:2005/09/26(月) 07:33:41
>>548
コンパイラの違いが原因か・・・
gccでは問題なかったが、VS.NET2k3で試してみたらそのバグ確認
forループの初期化式をi=-1からi=0にしといて
550デフォルトの名無しさん:2005/09/26(月) 07:37:55
>>549
了解です〜
これで気分よく学校行けます、ありがとうございました〜
551デフォルトの名無しさん:2005/09/26(月) 12:09:26
>>549
> char str[81], chr = 0, *pstr=str - 1;
そもそも、なぜpstrを規格外の位置にセットするのか
552デフォルトの名無しさん:2005/09/26(月) 15:28:41
>>551
色々弄くってる間に戻すの忘れてた・・・
よくこれで動いてたな

しかもgccで-mno-cygwinのオプション付けてコンパイルし直してみたら
何故か>>548のバグ発生・・・どうなってんだ('A`)
553デフォルトの名無しさん:2005/09/26(月) 15:42:37
>>552
規格外のことをやっているんだ。何が起きたって不思議じゃない。
554デフォルトの名無しさん:2005/09/26(月) 15:43:26
>>492
#include <stdio.h>
#include <stdlib.h>

#define XOR(a, b)       ((a)?!(b):!!(b))
#define MID3(x,y,z,err) (XOR((x)<(y),(x)<(z))?x:XOR((y)<(z),(y)<(x))?y:XOR((z)<(x),(z)<(y))?z:((err),(z)))
#define ERROR(msg)      (fprintf(stderr, msg), exit(1))

int main(void)
{
  char          buf[256];
  double        a,b,c;
  const char    *msg = "異なる実数を3つ,スペースで区切って入力してください\n";

  printf(msg);
  fgets(buf, sizeof(buf), stdin);
  if (sscanf(buf, "%lf%lf%lf", &a, &b, &c) != 3)
    ERROR(msg);

  printf("中間値=> %lf\n", MID3(a, b, c, ERROR(msg)));

  return 0;
}
555デフォルトの名無しさん:2005/09/26(月) 15:48:12
最低だな。
556デフォルトの名無しさん:2005/09/26(月) 15:55:12
よろしくお願いしますm(._.)m
[1] C言語講座
[2] 問題文
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/938.txt
ヒープを作成するプログラムを作成
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] VC 6.0
 [3.3] 言語: C++
[4] 期限: 明後日まで
557デフォルトの名無しさん:2005/09/26(月) 16:00:32
>>556
「ヒープソート」でググれば腐るほど例が出てくるというのに・・・。
558デフォルトの名無しさん:2005/09/26(月) 16:03:33
>>553
だよな・・・('A`)
正直すまんかった
559デフォルトの名無しさん:2005/09/26(月) 16:15:37
>>556
その出題者はヒープソートの意義を理解しとらんのとちゃうか
560デフォルトの名無しさん:2005/09/26(月) 17:22:19
下痢便
561デフォルトの名無しさん:2005/09/26(月) 17:58:26
>>556
ソートじゃなくてヒープを作成すればいいのかな?
562デフォルトの名無しさん:2005/09/26(月) 21:25:34
[1] 授業単元: プログラミング論
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/939.txt
  
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: bcc32(5.5.1.2)
 [3.3] 言語: C
[4] 期限: [2005年9月29日23:00まで]
[5] その他の制限: 特にありません。

以上です。どうぞよろしくお願いします。
563デフォルトの名無しさん:2005/09/26(月) 21:57:26
>>562
こんな問題出されて、やらなきゃならんとは、最近の学生はかわいそうだな。
数学嫌い増やすのと一緒だなあ。プログラム嫌いが増えちゃうよ。
プログラムって、こんな詰まらんものじゃないぜ〜
564デフォルトの名無しさん:2005/09/26(月) 22:02:25
>>562
問題1のほう。コンパイルもしていないけどw
#手抜きじゃ
double calculate_30a_without_account_discount( double used ) {
double base = 780.0;
double b1 = 120.0;
double b2 = 300.0;
double pay;
pay = base;
if ( used <= b1 ){
pay += used * 15.58;
return pay;
}
pay += b1 * 15.58;
if( used <= b2 ){
pay += (used-b1) * 20.67;
return pay;
}
pay += b2 * 20.67 + (used-b2) * 20.43;
return pay;
}
double calculate_30a( double used ) {
return calculate_30a_without_account_discount( used ) -50.0;
}
565デフォルトの名無しさん:2005/09/26(月) 22:03:32
>>562
#include <stdio.h>
#define FURIKOMI 1

int main(void)
{
int used, price = 780;
scanf("%d", &used); /*面倒なのでscanf*/
if (used <= 120) {
price += used * 15.58;
} else if (used > 120 && used <= 300) {
price += 1869.6 + 20.67 * (used - 120);
} else {
price += 1869.6 + 3720.6 + 22.43 * (used -420);
}

if (FURIKOMI) price -= 50;
price *= 1.05;
return 0;
}

とりあえず1個目だけ作った@脳内gcc
仕様が曖昧なので勝手に解釈してる所もあるから適当に修正してくれ
曖昧なところ
・口座振り込みの時は50円引きとかいてあるがユーザーに選択させるのか?
(プリプロセッサ文で切り替えるようにしてる)
・消費税分と書いてあるわりに、肝心の例にそれが考慮されてない希ガス

ってか本当につまらない課題だな・・・
まぁ俺も来年、そんなのを作らさせることになると思うが_| ̄|○
566デフォルトの名無しさん:2005/09/26(月) 22:06:40
>>565
何間抜けなことしてるんだ俺・・・
なぜか300と120足してるし、肝心の結果表示してないし('A`)
567556:2005/09/26(月) 22:19:15
ソートじゃなくてヒープ作成しろと書いてありました
(;∀;)間際らしくてごめんなさい
568デフォルトの名無しさん:2005/09/26(月) 22:22:59
>>567
嫌と言うほど大量に転がってるヒープソートのコードから
ヒープ作成部分だけを抜き出せ
569562:2005/09/26(月) 22:54:03
皆様、本当にありがとうございます。

>>565
>・口座振り込みの時は50円引きとかいてあるがユーザーに選択させるのか?
紛らわしくてすいません。
選択ではなく、必ず50円引きになるようにとのことです。

>>・消費税分と書いてあるわりに、肝心の例にそれが考慮されてない希ガス
> 780+[120*15.58+180*20.67+120*22.43+{0*420}]-50
> =780+[1869.6+3720.6+2691.6+{0}]-50
> =9011

の後に
>消費税額相当 9011*0.05=450.55 よって電気料金は9011+450=9461円
を入れるのを忘れていました。
テンプレの注意点にも書いてあるのに…本当に申し訳ありません。


>本当につまらない課題だな・・・
先生自体は良い人なんですが…。
「ゲームを作りたい!」とか確固たる目標が無い人間が相手なので、
こういう一般的な問題を出すしかないんでしょうね。
私もプログラムに興味あったから授業取ってみたんですけど、
授業の内容じゃ全然プログラムに興味持てないです。
専攻の経済の勉強の方が面白く感じる…
プログラムを始めるなら個人で本とか買ったほうがいいのかな。
570デフォルトの名無しさん:2005/09/26(月) 23:21:47
>>569
一般的な問題というか……。
あまりに単純で機械的で、味も素っ気も創意工夫の余地も無ければ
驚きも無い。こりゃあ退屈だろう。
ファイルの入出力さえできれば、別に画像処理だって出来るのにな。

やる気があるんなら自習してみるんだね。ただしいきなりCは薦めないが。
571デフォルトの名無しさん:2005/09/26(月) 23:27:08
それでも・・・
パラメータをどう渡すか、というのは一つのテーマだな。
再コンパイルしないで消費税を変更するには?とか
変数名をどうするか・・・とか
整数だけで演算させるとか(金融系はそうなんだろう)
有効桁数は?とか・・・
まあ、この辺は金融系プログラマさんにお出まし願うほーがいいかも。
572デフォルトの名無しさん:2005/09/26(月) 23:43:34
>>571
大丈夫、金融系プログラマは消費税率が変わったら徹夜してコーディングしなおすのです。
大丈夫、金融系プログラマは変数名は例えばShouhiZeiのように判りやすい名前を付けるのです。
大丈夫、金融系プログラマは演算は全てDB側で行なうので有効桁数なんて気にしないのです。
573デフォルトの名無しさん:2005/09/26(月) 23:47:08
>>569
こんなの作ったら?
MonoView Part1
http://pc7.2ch.net/test/read.cgi/software/1120578352/
574デフォルトの名無しさん:2005/09/26(月) 23:58:09
金融系プログラマではないが。
C#とかだとdecimal型が組み込みなので大変便利だと思いますた。
575デフォルトの名無しさん:2005/09/27(火) 00:02:33
>>571
つ COBOL
576デフォルトの名無しさん:2005/09/27(火) 12:13:58
【質問テンプレ】
[1] 授業単元: 情報処理概論
[2] 問題文
0が入力されるまで正整数を読み込み、最大値、最後の0を除いた最小値、
全数値の平均(0を含めない)を出力するプログラムをつくれ。
[3] 環境:windows 、言語:C言語
[4] 期限:10月29日(木)14時半
[5] その他の制限: 下に載せたものでだいたいあっているそうなのですが、
うまく動きません。{}の位置関係が怪しいようなのですが、
自分で見るかぎりこれで合っているように思えるのです。
どこが間違っているのか添削していただけると大変嬉しいです。
よろしくおねがいします。

#include<stdio.h>
main()
{
int a[1000],i,j,sum=0,n=0,max,min;
for(i=1,a[0]=-1;a[i-1]!=0;i++){
 scanf("%d",&a[i]);}
n=n+1;max=0,min=9999;
for(j=0;j<=i-1;j++){
if(max<a[j]){
max=a[j];}
if(min>a[j]){
min=a[j];}
sum=sum+a[i];
sum*1.00/(n-1);}
printf("max=%d\n",max);
printf("min=%d\n",min);
printf("ave=%d\n",sum);
}
577デフォルトの名無しさん:2005/09/27(火) 12:24:48
>>576
sum*1.00/(n-1);}
↑計算してるだけで代入してないし、n=n+1がforループの外にあるから
常にn=1になって計算の意味がない。

n=n+1を入力ループの中に入れ、変数aveを作って、
ave = sum*1.00/(n-1);
とする。これはループの外に出す。

ループカウンタのjも、入力時にi=1から入れてるんだから初期値指定が違う。
j=0→j=1
最後の0は含めない、て書いてあるんだから終了条件も
j<=i-1→j<i-1

合計に追加する配列のインデックスが違う
sum=sum+a[i];→sum=sum+a[j];

平均を入れる変数を作ったから、表示も変える
printf("ave=%d\n",sum);→printf("ave=%d\n",ave);
578デフォルトの名無しさん:2005/09/27(火) 12:59:43
>>576
いくつ入力されるか分からないから、線形リストにした方がいいと
無茶なことを言っておく
579デフォルトの名無しさん:2005/09/27(火) 19:16:42
最大値と最小値と合計と入力数だけ覚えておけばいいじゃん
580デフォルトの名無しさん:2005/09/27(火) 22:20:28 ID:0
合計なんか持ってたらすぐにオーバーフローしちゃうじゃん
581デフォルトの名無しさん:2005/09/27(火) 23:03:53
最大・最小はまぁ持っておけばいいとして
平均は最初5つ程度の平均を出して、それを基準として差の和から出した方がいい希ガス
582デフォルトの名無しさん:2005/09/28(水) 00:52:09
合計なんてdoubleで持ってりゃ、よほどの事がない限り溢れないと思うんだが。
どうせ出力するのは平均なんだし。
583デフォルトの名無しさん:2005/09/28(水) 00:55:28
まあ、扱える個数やら範囲を決めるってのも大切ですな。
584デフォルトの名無しさん:2005/09/28(水) 01:02:02
質問なんですが、get_int()関数の関数仕様書って
どのようにかけばよいのかさっぱりです……
585デフォルトの名無しさん:2005/09/28(水) 01:06:49
まあ課題のレベルから言って、>>582の言うようにdoubleで持っておけば
十分だろう。てなワケで、こんな感じだな。

#include <stdio.h>
#include <limits.h>

int main()
{
    double sum = 0.0;
    int n, cnt = 0, max = 0, min = INT_MAX;

    while (scanf("%d", &n) == 1 && n > 0) {
        sum += n;
        if (n < min) min = n;
        if (n > max) max = n;
        ++cnt;
    }
    if (cnt)
        printf("最大値: %d 最小値: %d 平均値: %g\n", max, min, sum/cnt);
    return 0;
}
586デフォルトの名無しさん:2005/09/28(水) 12:36:50
>>585
doubleを使うのは入力値が正負に大きく振動してる場合はまずいね
この場合は関係ないだろうけど
587デフォルトの名無しさん:2005/09/28(水) 15:29:47
【質問テンプレ】
[1] 授業単元: C演習
[2] 問題文(含コード&リンク):y=x×x+2x−3とy=0
で囲まれた面積をモンテカルロ法で求める
[3] 環境
 Windows
 C言語
[4] 期限: 2005年9月28日12:00まで
[5] その他の制限: 特になし
588デフォルトの名無しさん:2005/09/28(水) 16:20:23
>>587
587 名前:デフォルトの名無しさん 本日のレス 投稿日:2005/09/28(水) 15:29:47
【質問テンプレ】
[1] 授業単元: C演習
[2] 問題文(含コード&リンク):y=x×x+2x−3とy=0
で囲まれた面積をモンテカルロ法で求める
[3] 環境
 Windows
 C言語
[4] 期限: 2005年9月28日12:00まで
[5] その他の制限: 特になし
589デフォルトの名無しさん:2005/09/28(水) 16:34:44
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double rand_range(double x, double y)
{
  if (x > y) { double temp = x; x = y; y = temp; }
  return (y - x) * rand() / RAND_MAX + x;
}

int main(void)
{
  int    inner, outer;

  for (inner = outer = 0; outer < 1000000 && inner < 1000000;) {
    double x = rand_range(-3, 1);
    double y = rand_range(-4, 0);
    if (y > (x+3)*(x-1)) inner++;
    if (y < (x+3)*(x-1)) outer++;
  }

  printf("%g\n", 16.0 * inner / (inner + outer));

  return 0;
}
590デフォルトの名無しさん:2005/09/28(水) 18:00:58
[1] 授業単元:C言語
[2] 問題文:再帰関数を用いて1〜10までの階乗を順に表示するプログラムを作成せよ
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン VC 6.0
 [3.3] 言語: C
[4] 期限: 金曜日まで
[5] その他の制限: scanfを使わないで再帰関数に直接引数を与える
階乗のプログラムは>>446で分かったのですが、
0!=1
1!=1
2!=2
みたいな感じでwhile文で表示させたいんですがどうすればいいか教えてください
591デフォルトの名無しさん:2005/09/28(水) 18:06:41
>>590
問題文を「再帰をもちいて階乗を求める関数を作り、1〜10までの階乗を表示するプログラムを記述せよ」と解釈して宜しいでしょうか?
592デフォルトの名無しさん:2005/09/28(水) 18:09:04
>>591
はい
593デフォルトの名無しさん:2005/09/28(水) 18:13:07
配列に格納した数字を昇順に並べ替えるにはどうしたらいいんですか?
594デフォルトの名無しさん:2005/09/28(水) 18:13:37
#include <stdio.h>

int frac(int x) {
if (x == 0) {
return 1;
} else if (x == 1) {
return 1;
} else {
return frac(x - 1);
}
}

int main() {
int i = 0;

while(i<10) {
printf("%d! = %d\n", (i + 1), frac(i + 1));
i++;
}

return 0;
}
595デフォルトの名無しさん:2005/09/28(水) 18:22:28
>>594
ありがとうございました。
while文の勉強不足でした。
596デフォルトの名無しさん:2005/09/28(水) 18:46:50
【質問テンプレ】
[1] 授業単元: 演習
[2] Echoサーバを作成しなさい。
[3] 環境
 Windows XP SP2で動けばいいと思う
VC++ 6.0
 C++言語
[4] 期限: 2005年10月3日まで
[5] その他の制限: 特になし
597デフォルトの名無しさん:2005/09/28(水) 18:53:59
>>593
qsortかと。
598562:2005/09/28(水) 19:10:58
何度もすいません。
>>562で挙げた問題2の方をやってみたのですが、
分からないのでまた質問させて下さい。

[1] 授業単元: プログラミング論
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/941.txt
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: bcc32(5.5.1.2)
 [3.3] 言語: C
[4] 期限: [2005年9月29日23:00まで]
[5] その他の制限:特になし

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/942.txt
↑分からないなりにやってみました。
でも、「2ヶ月に一回請求のため、使用料はまず1/2にされ、各月ごとに算出した後合算されます」
の部分をどうしたらいいかが分からないので教えてください。
というか、基本的に間違えまくっていると思うので指導お願いします。

もっと効率的な方法があるんでしょうけど、私のレベルではこれが限界でした。
私のを直すより、他の上手い人が初めから書き直したほうがよさそうな気もしますが…
599587:2005/09/28(水) 19:27:23
>>589さん有難うごさいました!
素早く答えてくれて大変助かりました〜
600デフォルトの名無しさん:2005/09/28(水) 19:39:20
>>593
「数字」なのか、「数値」なのかはっきりさせてほしい。
あと、>>1
ついでに言うと、学校の課題なら問題文を全部のせたほうがいい。
601デフォルトの名無しさん:2005/09/28(水) 19:44:17
>>600
数値です。
602デフォルトの名無しさん:2005/09/28(水) 20:06:56
>>601
いや、だからちゃんと>>1を読めと…

面倒なので答えておくと、
 1) qsort関数を使う
 2) 自分で配列の要素を比較して昇順に並べ替える
のどちらか。
どちらか好きな方法でやってくれ。
603デフォルトの名無しさん:2005/09/28(水) 20:14:41
>>598
2月分の使用量を入力させて、まずそれを2等分
んでそれぞれに対して料金計算をしてそれを足し合わせて2ヶ月間の料金をだすんじゃまいか?
604デフォルトの名無しさん:2005/09/28(水) 20:24:50
>>600 >>602
自分で配列の要素を比較して昇順に並べ替える 方法が分からないんです…。これだけの為に質問テンプレートに書く必要ないと思いまして…。スミマセン!m(_ _)m
605デフォルトの名無しさん:2005/09/28(水) 20:33:29
それ以前に、マルチするなボケ
606デフォルトの名無しさん:2005/09/28(水) 20:37:35
>>604
ここで回答ほしいならテンプレ書け
そうでないと煽られて終了
607デフォルトの名無しさん:2005/09/28(水) 20:39:34
ここの回答者になるのはどうすればいいですか?
608デフォルトの名無しさん:2005/09/28(水) 20:41:23
テンプレ書くなら、ソートの知識がどれだけあるか、
授業でどこまで習ったかをちゃんと書いてくれ。
609デフォルトの名無しさん:2005/09/28(水) 20:44:34
>>607
どうするも何も、自分に扱える内容なら回答してあげればいいと思う。
手に負えないならROMるなり、他人の回答にツッコミ入れるなりお好きなように。
610デフォルトの名無しさん:2005/09/28(水) 20:45:40
>>609
なるなる。
質問者以上回答者未満なレベルなもので。
611デフォルトの名無しさん:2005/09/28(水) 20:49:36
根拠と自信のあるものだけ答えてやれよ
612デフォルトの名無しさん:2005/09/28(水) 21:01:24
>>605
死ね
613デフォルトの名無しさん:2005/09/28(水) 21:23:27
>>598
折角書いたのでうpしとく
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/943.txt

一通りのバグは潰したはずだが、出力のチェックをしようにも
正しい値を出すのが面倒なので例となってる51のみチェック
614デフォルトの名無しさん:2005/09/28(水) 21:24:34
>>613
書き忘れたけど、テスト環境はgcc3.3.3@cygwin
-std=c89のオプション付けてのコンパイル確認済み
615デフォルトの名無しさん:2005/09/28(水) 22:24:55
>>604
ググれば腐るほど出てくるのに・・・。

void bsort(int* d,int n){int i,j,t;for(i=0;i<n;i++){for(j=n-1;j>i;j--){
if(d[j]<d[j-1]){t=d[j];d[j]=d[j-1];d[j-1]=t;}}}}
616598:2005/09/28(水) 23:33:33
>>603>>613
どうもありがとうございます。

>>613
bcc32でコンパイルしてみました。
完璧に動作しました。
ホント、感謝しています。

それにしても、ソースみても全然何をやっているのか分からない…
ちゃんと自分でも勉強しないと駄目だなぁ。
617デフォルトの名無しさん:2005/09/28(水) 23:35:06
>>616
手抜きでコメント全く付けなかったからな・・・スマソ
分からない点が合ったら言ってくれれば回答するよ
618デフォルトの名無しさん:2005/09/29(木) 00:58:39
[1] 授業単元: 情報工学演習
[2] 問題文(含コード&リンク):
1行に1語の英単語が書かれたファイルがある。
英単語は小文字のアルファベットのみから構成させる。
ファイルにかかれている単語を用い、アルファベットのしりとりを、
もっとも長い回数行う順序を1通り出力するプログラムを書け。
余裕があれば日本語のしりとりでも行ってみること(「ん」や日本語コードに気をつけること)
[3] 環境
 [3.1] OS: コンソール
 [3.2] コンパイラ名とバージョン: 標準C
 [3.3] 言語: C
[4] 期限: とくにありません
[5] その他の制限: 標準ライブラリのみ可
619デフォルトの名無しさん:2005/09/29(木) 01:00:09
>>618
最大で何行有るんだ?
620618:2005/09/29(木) 01:05:00
入力ファイルも適当に作ってねーって言われました・・・。
実用ではないにせよ・・・辞書の単語数が数万程度だったと思うので、
10万行に対応すれば文句いわれないと思います。
621デフォルトの名無しさん:2005/09/29(木) 01:08:00
>>618
ちなみ出された際の期限てどの位?
622618:2005/09/29(木) 01:11:45
1週間です<期限。
データ表現は先頭文字、末尾文字のペアか二次元配列に文字列のリストかスタックでいいと思うんですが、
アルゴリズムが、さっぱりです。
623デフォルトの名無しさん:2005/09/29(木) 01:17:48
期限あるならなんで書かないんだ?
624618:2005/09/29(木) 01:22:29
荒らしてしまったようなので去ります。失礼しました。
625デフォルトの名無しさん:2005/09/29(木) 01:26:41
>>618
この問題だと答え知ってなきゃ1時間程度じゃ終わらん
626デフォルトの名無しさん:2005/09/29(木) 01:38:24
>>618
有向グラフ
最長路問題
627デフォルトの名無しさん:2005/09/29(木) 01:46:31
628618:2005/09/29(木) 01:55:05
ありがとうです(;_;)
理解しようと努力中であります。
629616:2005/09/29(木) 02:07:36
>>617
あ、すいません。
>それにしても、ソースみても全然何をやっているのか分からない…
は単なる独り言のつもりだったんです。
本当は直接、「どういう風になってるか教えてください」と言うべきだったのに、
なんか遠まわしに教えてください、となってしまってすいません。

でも、ちょっと聞きたいことがあるので聞かせてください。

amount[1] = amount[0]/2;
amount[0] -= amount[1];
for (i=0;i<2;i++) price += calc(amount[i]);

int price=KIHON, nRange, over=1, i, j,
addTable[][3] = {

nRange=sizeof(addTable)/sizeof(addTable[0]);

各部分がどのような処理を行っているのか分からないので、
教えていただけないでしょうか。
ここが分かれば、後は自力で理解できると思うのでよろしくお願いします。

630617ではない:2005/09/29(木) 02:41:37
>>617じゃないが勝手に答えておく。

>amount[1] = amount[0]/2;
>amount[0] -= amount[1];
>for (i=0;i<2;i++) price += calc(amount[i]);

「2ヶ月に一回請求のため、使用料はまず1/2にされ」るので
入力した値をammount[0]とammount[1]に半分ずつ分けて、
calcでそれぞれの料金を計算し、その合計をpriceに入れている。

>addTable[][3] = {
>
>nRange=sizeof(addTable)/sizeof(addTable[0]);
addTableは加算額の料金表。
nRange=〜はaddTable[][3]の要素数(1個目の[]に入る数値)の計算。
addTable全体のサイズ(int型24個分)を、1要素のサイズ(int型3個分)で割ることで、
要素数(この場合は8)を取得できる。
631デフォルトの名無しさん:2005/09/29(木) 02:55:16
余計に混乱させてしまうかもしれないが、calc()はもっと短くかけるな。
main()は同じものを仮定する。
↓のバージョンだと、マクロは全部要らない。INT_MAXを使っているので
<limits.h>を#includeすること。

int MiN(int m, int n)
{
    return m > n ? n : m;
}

int calc(int amount)
{
    static int tbl[][2] = {
        { 8, 75 }, { 15, 80 }, { 20, 90 }, { 30, 100 }, { 50, 120 },
        { 100, 130 }, { 300, 155 }, { 1000, 185 }, { INT_MAX, INT_MAX }
    };
    int i, price = 500;
    for (i = 0; amount > tbl[i][0]; ++i)
        price += (MiN(amount, tbl[i+1][0]) - tbl[i][0]) * tbl[i][1];
    price *= 1.05;
    price -= price % 10;
    return price;
}
632デフォルトの名無しさん:2005/09/29(木) 03:55:52
>>630
分かりやすい説明ありがとうございます。
お陰さまで後は自分で何とかなりそうです。

>>631
アドバイスありがとうございます。
結構短く出来るものなんですね。
すごいです。
633デフォルトの名無しさん:2005/09/29(木) 14:09:24
>>630
617だが完全に寝てた(;´Д`)
説明サンクス

>>631
綺麗なソースだな・・・もっと勉強しないとダメだな_| ̄|○
634デフォルトの名無しさん:2005/09/29(木) 18:41:40
プログラムの課題です、もうどうしたら良いのか分かりません。
マジで困っています。
こんなの簡単にやってしまえる神様〜教えてください。

課題は下記の構造体を宣言し、mallocを使ってこの構造体100個分のメモリを確保せよ。
さらにこの構造体に適当な値を設定して、コンソール画面に表示するサンプルプログラムを作成せよとの事です。

typedef struct _tagSTTEST{
int iId; //ID番号(0..の数値を入れる)
char szId[32]; //ID番号の値を文字列にして設定する
double dVal;   //ID番号/0.1を設定する
}STTEST, *PSTTEST;
635デフォルトの名無しさん:2005/09/29(木) 18:45:00
636デフォルトの名無しさん:2005/09/29(木) 18:54:55
634です、遅くなりましたすいません。

[1] 授業単元:プログラム課題
[2] 問題文:mallocを使ってこの構造体100個分のメモリを確保せよ。
さらにこの構造体に適当な値を設定して、コンソール画面に表示するサンプルプログラムを作成せよ
[3] 環境
 [3.1] OS: WindowsXP SP2?
 [3.2] コンパイラ名とバージョン:VC++ 6.0
 [3.3] 言語: C
[4]期限:申し訳ないのですが金曜日の12:00まででお願いします。
[5] その他の制限:ありません

よろしくお願いします
637デフォルトの名無しさん:2005/09/29(木) 20:27:20
>>636
#include <stdio.h>
#include <stdlib.h>

typedef struct _tagSTTEST{ 
  int iId;
  char szId[32];
  double dVal;
} STTEST, *PSTTEST;

void setVal(PSTTEST psttest, int id) {
  psttest->iId = id;
  sprintf(psttest->szId, "%d", id);
  psttest->dVal = id / 0.1;
}
void printVal(PSTTEST psttest) {
  printf("%d %s %f\n", psttest->iId, psttest->szId, psttest->dVal);
}

int main() {
  int i;
  PSTTEST psttest, p;
  psttest = (PSTTEST)malloc(sizeof(STTEST) * 100);

  for (i = 0, p = psttest; i < 100; ++i) setVal(p++, i);
  for (i = 0, p = psttest; i < 100; ++i) printVal(p++);
}
638デフォルトの名無しさん:2005/09/29(木) 20:32:07
>>637
キモ

お前就職できないわ。
639デフォルトの名無しさん:2005/09/29(木) 20:32:30
ふと思ったんだが、こういう場合にcallocじゃなくてmalloc使うメリットってある?
640デフォルトの名無しさん:2005/09/29(木) 20:38:46
>>636
#include <stdlib.h>

typedef struct _tagSTTEST{
  int iId;       //ID番号(0..の数値を入れる)
  char szId[32]; //ID番号の値を文字列にして設定する
  double dVal;   //ID番号/0.1を設定する
} STTEST;

int main(void)
{
  int   i;
  for (i = 0; i < 100; i++) malloc(sizeof(STTEST));
  return 0;
}
641デフォルトの名無しさん:2005/09/29(木) 20:40:47
>>636
#include <stdio.h>
#include <stdlib.h>

typedef struct _tagSTTEST{
  int iId;       //ID番号(0..の数値を入れる)
  char szId[32]; //ID番号の値を文字列にして設定する
  double dVal;   //ID番号/0.1を設定する
} STTEST;

int main(void)
{
  int           id = 5;
  STTEST        s;

  s.iId = id;
  sprintf(s.szId, "%d", id);
  s.dVal = id / 0.1;

  printf("iId:%d, szId:%s, dVal:%g\n", s.iId, s.szId, s.dVal);

  return 0;
}
642デフォルトの名無しさん:2005/09/29(木) 20:42:46
>>638 別に普通だと思うが何か変?
643デフォルトの名無しさん:2005/09/29(木) 20:43:41
>>639
全ての値を自分で設定することがわかってるなら calloc より高速
644 ◆UNEZM4vps2 :2005/09/29(木) 21:42:31
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: Free BSD
 [3.2] コンパイラ名とバージョン: 学校のパソコンなのでコンパイラが
                  分かりません。すいません!
 [3.3] 言語: C言語
[4] 期限: [2005年10月3日17:00まで]
[5] その他の制限: 高専2年程度の知識の範囲内です。
         #include<stdio.h>と#include<unistd.h>のみ
         使用していいです。

次レスに自分が作ったプログラムを載せます。
そのプログラムを実行すると "Sigmentation何とか(core dumped)"と出ました。
うろ覚えでごめんなさい。

よろしくお願いします。m(__)m
645デフォルトの名無しさん:2005/09/29(木) 21:44:00
main()
{
return 0;
}
646 ◆UNEZM4vps2 :2005/09/29(木) 21:45:24
#include<stdio.h>
#include<unistd.h>
#define ESC 0x1b
#define GREEN printf("%c[32m",ESC);
#define NON printf("%c[m",ESC);

/*x行,y列への場所の移動*/
void gotoXY(int x,int y){
printf("%c[%d;%dH",ESC,x,y);
}
/*x行y列からn個の文字列を表示*/
void disp(int x,int y,char *p[],int n){
int i;
for(i=0;i<n;i++){
gotoXY(x+i,y);
printf("%s\n",p[i]);
}
}
/*x行からy行をクリア*/
void block_clear(int x,int y){
int i;
for(i=x;i<=y;i++){
printf("%c[%d;1H",ESC,i);
printf("%c[2K",ESC);
}
}
647 ◆UNEZM4vps2 :2005/09/29(木) 21:47:02
main部分です

main(){
int m,i=0;
FILE *fp;
char *pic[300];
printf("%c[2J",ESC);
gotoXY(8,5);
GREEN
 printf("______________________________________________________________________________________________________\n");
NON
if((fp=fopen("pic.txt","r"))==NULL){
printf("ファイルが見つかりません\n");
return 1;
}
648デフォルトの名無しさん:2005/09/29(木) 21:47:19
main()が無いけど
関数だけ作ったの?
649デフォルトの名無しさん:2005/09/29(木) 21:47:52
C言語でnullで終わる文字列中に指定した文字が何度現れるかを返す関数ってありますか?
650 ◆UNEZM4vps2 :2005/09/29(木) 21:48:30
while(1){
if(feof(fp)!=0) break;
switch(i)
case 0:sleep(1);
block_clear(5,7);
for(m=0;m<3;m++){
fgets(pic,300,fp);
disp(m+5,2+3*i;pic,1);
}
break;
case 1:sleep(1);
block_clear(5,7);
for(m=0;m<3;m++){
fgets(pic,300,fp);
disp(m+5,2+3*i;pic,1);
}
break;
case 2:sleep(1);
block_clear(5,7);
for(m=0;m<3;m++){
fgets(pic,300,fp);
disp(m+5,2+3*i;pic,1);
}
break;
651 ◆UNEZM4vps2 :2005/09/29(木) 21:49:11
case 3:sleep(1);
block_clear(5,7);
for(m=0;m<3;m++){
fgets(pic,300,fp);
disp(m+5,2+3*i;pic,1);
}
break;
}
i++;
}
}
/*ファイルpara2.txt*/ パラパラのもとです☆
/*
いいか、みんな
(° д°)
(| y |)
故郷の音というものは
郷 ( °д°) 音
\/ | y |\/
心によく響くものだ
( °д°) 響
(\/\/
故郷の家族を大事にな
(°д°)
m9| y |)
*/
652デフォルトの名無しさん:2005/09/29(木) 21:50:32
とりあえずメモリを確保してから読み込め
653デフォルトの名無しさん:2005/09/29(木) 21:56:03
fgets の引数おかしくね?セグフォ以前にコンパイル通らない気がするが?
654デフォルトの名無しさん:2005/09/29(木) 21:59:40
>>649
ポインタとstrchrを使ってforした後で制御変数を読む

char str[] = "nullpo", *ptrStr = str;

for (i=0;ptrStr=strchr(ptrStr,chr);i++,ptrStr++) {
if (ptrStr == NULL) break;
}
655デフォルトの名無しさん:2005/09/29(木) 22:01:31
>>653
一応picはcharポインタの要素数300の配列先頭のアドレスを持ったポインタだから
コンパイラ的には無問題じゃまいか?
656デフォルトの名無しさん:2005/09/29(木) 22:06:36
>>655 fgets の第一引数は char* を要求するけど,pic の型は char** だよ?
657デフォルトの名無しさん:2005/09/29(木) 22:08:19
>>654
やっぱ多少は自分で作らないとないんですね、わかりました。
どうもです〜^^)
658デフォルトの名無しさん:2005/09/29(木) 22:08:55
>>656
スマソ、間違えた・・・
で、試してみたがWarning扱いだからコンパイル自体は完了すると思われ
659 ◆UNEZM4vps2 :2005/09/29(木) 22:13:33
>>652
メモリの確保ってどういうことですか?

>>653>>655
picの前に*をつけても関係ないですよね?
660デフォルトの名無しさん:2005/09/29(木) 22:15:06
>>659
char arr[];
文字型の配列

char *arr[];
文字型のポインタの配列
661デフォルトの名無しさん:2005/09/29(木) 22:16:17
>>659 (◆UNEZM4vps2 )
どこに何を入れたいか書いてくれ.書き直したほうが早そうだ.
662 ◆UNEZM4vps2 :2005/09/29(木) 22:19:41
>>661
case 〇:sleep(1);
block_clear(5,7);
for(m=0;m<3;m++){
fgets(pic,300,fp);←ここのpicを*picにするということです
disp(m+5,2+3*i;pic,1);
}
break;
663デフォルトの名無しさん:2005/09/29(木) 22:21:40
>>662
それなら警告消えるんじゃまいか?
けどどっちにしても*picが示す領域が何処だよ?って話
664デフォルトの名無しさん:2005/09/29(木) 22:28:46
だからさ、何したいかを書いてくれって.
そこは3回ループまわして何がしたいんだ?
665 ◆UNEZM4vps2 :2005/09/29(木) 22:31:06
>>663
1回学校で試したのですが、
確かに警告は消えましたが、地面を表示するだけにとどまりました泣

case 〇:sleep(1);
block_clear(5,7);
for(m=0;m<3;m++){←この行の下まできちんと動作してました。
fgets(pic,300,fp);←この行でやぱーり駄目なんですね。
disp(m+5,2+3*i;pic,1);
}
break;

コンパイル、書き直ししてくださったみなさん
お手数かけてすみません!
666 ◆UNEZM4vps2 :2005/09/29(木) 22:34:44
>>664
テキストファイルからAAを1行ずつ読み込んでモニタに表示・・・
を3回繰り返すことでひとかたまりのAAを表示したいんです。
667デフォルトの名無しさん:2005/09/29(木) 22:37:27
>>666
とりあえずchar *pic[300];をchar pic[300];にしろ
危なすぎる
668 ◆UNEZM4vps2 :2005/09/29(木) 22:40:18
>>667
dクスです!(^^)
でも理由は何ですか?
669デフォルトの名無しさん:2005/09/29(木) 22:40:41
中途半端な回答すんなやwwwww
全然解決になってねえぞwwww
つか、だまされるなwww
670デフォルトの名無しさん:2005/09/29(木) 22:42:52
>>666
>>651にはAAが四つあるように見えるのだが…
671デフォルトの名無しさん:2005/09/29(木) 22:44:05
1. >>667 の変更をする

2. main の disp(m+5,2+3*i;pic,1); とかのセミコロンをカンマに変更

3. disp を以下のように変更
void disp(int x,int y,char p[],int n){
int i;
for(i=0;i<n;i++){
gotoXY(x+i,y);
printf("%s\n",p);
}
}

で,まあなんとかなるんじゃね? よくしらんけど.
672 ◆UNEZM4vps2 :2005/09/29(木) 22:45:27
>>670
3行で1つのかたまりが

いいか、みんな
(° д°)
(| y |)

↑こんなAAが
4つあるってことです
673デフォルトの名無しさん:2005/09/29(木) 22:47:00
>>668
ポインタしか作ってない=実際にデータが書き込まれる領域は不定な状況で
それを利用しようとしてる

メモリ確保するか普通の文字配列にしろ
674デフォルトの名無しさん:2005/09/29(木) 22:47:53
>>670
そのAAはそれで1セット
確かヤンマーニ関連の奴だっけか
675デフォルトの名無しさん:2005/09/29(木) 22:50:40
ここはマジレス禁止なスレ?
676デフォルトの名無しさん:2005/09/29(木) 22:53:09
むしろマジレス推奨
677デフォルトの名無しさん:2005/09/29(木) 22:59:17
>>644>>666>>◆UNEZM4vps2 コメントのところだけ移植してくれ
#include<stdio.h>
#include<unistd.h>
#define ROW (3)
#define COL (256)
#define PARAPARA (3)
void disp(char buf[][COL], int row) {
    int i;
    // ここで座標移動
    for (i = 0; i < row; ++i) {
        puts(buf[i]);
    }
}
int main(int argc, char ** argv) {
    FILE * f; int i, j; char buf[ROW][COL];
    if (argc < 2) return 1;
    if ((f = fopen(argv[1], "r")) == NULL) return 1;
    for (i = 0; i < PARAPARA; ++i) {
        for (j = 0; j < ROW; ++j) {
            fgets(buf[j], sizeof(buf)/ROW, f);
        }
        disp(buf, ROW);
    }
    fclose(f);
    return 0;
}
678677:2005/09/29(木) 23:00:43
ごめん。PARAPARAは4だったな。マクロに感謝。
679 ◆UNEZM4vps2 :2005/09/29(木) 23:19:09
>>677"コメントのところだけ移植してくれ"ってどういうことですか?
低脳ですまそ
680 ◆UNEZM4vps2 :2005/09/29(木) 23:26:17
679は事故解決しますた!(・∀・)

でも677さんのプログラムの意味が高度すぎてわかんない・・・・

int main(int argc, char ** argv) {
この行の**←見たことない・・
681677:2005/09/29(木) 23:27:08
>>679
    // ここで座標移動 
って部分を◆UNEZM4vps2がやれって事でつ
682デフォルトの名無しさん:2005/09/29(木) 23:30:25
>>680
ここは質問スレじゃない
ファイル名ハードコーディングバージョンやるから黙ってね
int main(void) {
    FILE * f; int i, j; char buf[ROW][COL];
    if ((f = fopen("pic.txt", "r")) == NULL) return 1;
    for (i = 0; i < PARAPARA; ++i) {
        for (j = 0; j < ROW; ++j) {
            fgets(buf[j], sizeof(buf)/ROW, f);
        }
        disp(buf, ROW);
    }
    fclose(f);
    return 0;
}
683デフォルトの名無しさん:2005/09/29(木) 23:49:27
お前ら全員キモい。
なに?そのコード。
素直に作れや。
なに慣れないゴマスリしてんの?バカじゃない?
684 ◆UNEZM4vps2 :2005/09/30(金) 00:48:31
>>682
規則破りですいません
そしておとなしくしてます。。
685デフォルトの名無しさん:2005/09/30(金) 00:58:54
634です。
自分でいろいろ調べたりしたのですが解らなくて、本当に困っていたんです。

637、640、641で回答していただいた方本当にありがとうございました。
686デフォルトの名無しさん:2005/09/30(金) 02:26:29
main()
{
 return 0;
}
何で最近はこういう風に書くバカが多いんだろう。
main(){
 return 0;
}
こうだろう。
687デフォルトの名無しさん:2005/09/30(金) 02:39:39
>最近
なのは
main(){
 return 0;
}
こっち
(Javaとかの影響)
688デフォルトの名無しさん:2005/09/30(金) 02:47:31
どっちでもいいだろう
689デフォルトの名無しさん:2005/09/30(金) 02:52:01
iいやいや、俺はかなりおっさんだが
main(){
 return 0;
}
昔からこうだぞ
690デフォルトの名無しさん:2005/09/30(金) 02:53:39
若造の漏れは
main()
{
    return 0;
}
691デフォルトの名無しさん:2005/09/30(金) 02:55:45
俺は
int main(void)
{
 return 0;
}
692デフォルトの名無しさん:2005/09/30(金) 02:57:20
俺は
int main(){
return 0;
}
693デフォルトの名無しさん:2005/09/30(金) 04:05:17
俺は
int main()
{
    return 0;
}
694デフォルトの名無しさん:2005/09/30(金) 04:19:43
俺は
int main(){
return 0;
}
695デフォルトの名無しさん:2005/09/30(金) 04:33:06
どっちでもいいでしょや。
696デフォルトの名無しさん:2005/09/30(金) 04:36:30
俺は
int main() {
  return 0;
}
697デフォルトの名無しさん:2005/09/30(金) 07:52:13
[1] 授業単元:C++演習
[2] 問題文(含コード&リンク):ユーザーに3つの整数を入力させ、それらの最大公約数を表示するプログラムを作成しなさい。
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: g++ (?詳しくはわかりません)
 [3.3] 言語: C++
[4] 期限:2005年10月3日まで
[5] その他の制限:特になし
よろしくお願いします。
698デフォルトの名無しさん:2005/09/30(金) 08:32:29
>>697
#include <iostream>
int gcd(int a, int b) {
  while (int r = (a % b)) a = b, b = r;
  return b;
}
int main() {
  int a, b, c;
  std::cin >> a >> b >> c;
  std::cout << gcd(gcd(a,b), c) << std::endl;
}
699デフォルトの名無しさん:2005/09/30(金) 10:58:34
[1] 授業単元:プログラム課題
[2] 問題文(含コード&リンク):クラスのメンバ変数・メンバ関数をstaticで宣言した場合の
               通常のメンバ変数・メンバ関数との違いを示すサンプルプログラムを作成せよ
[3] 環境
 [3.1] OS:WindowsXP 
 [3.2] コンパイラ名とバージョン:VC++ 6.0
 [3.3] 言語: C++
[4] 期限:今日中に作成しないといけないんです17時までにどうかお願いします。
[5] その他の制限:特にありません
よろしくお願いします

CSample class : public
{
public:
CSample();
~CSample();
public:
static int iSample;
public:
static int Func( void);
}
700デフォルトの名無しさん:2005/09/30(金) 12:26:47
>>699
こんな感じで違いがわかってもらえるかもしれん
#include<iostream>
class CSample {
public:
CSample();
~CSample();
static int iSample;
static int Func( void);
};
int CSample::iSample=0;
CSample::CSample(){
iSample=1;
}
CSample::~CSample(){
iSample=2;
}
int CSample::Func(void){
return iSample;
}

int main(){
std::cout<<CSample::Func()<<std::endl;
{
CSample cs;
std::cout<<CSample::Func()<<std::endl;
}
std::cout<<CSample::Func()<<std::endl;
return 0;
}
701デフォルトの名無しさん:2005/09/30(金) 13:10:29
ありがとうございます。
非常に助かりました、とても感謝です。
702デフォルトの名無しさん:2005/09/30(金) 13:17:09
C言語です。
以下の配列をシェルソートによって小さい順に
並べ替える問題です。

int a[10]={2,6,1,7,3,9,4,8,5,0};

宜しくお願いします!
703デフォルトの名無しさん:2005/09/30(金) 13:30:07
>>702
Cでのシェルソート実装なんぞ腐るほどあるんだから探せ
704デフォルトの名無しさん:2005/09/30(金) 14:07:38
705デフォルトの名無しさん:2005/09/30(金) 14:40:37
>>703,704
探し方が分かりません。
助けてください・・・
706デフォルトの名無しさん:2005/09/30(金) 14:46:46
>>705 「シェルソート C言語」 でググれ馬鹿
707デフォルトの名無しさん:2005/09/30(金) 15:42:22
>>706
出来ました。
サンクスです!
708デフォルトの名無しさん:2005/09/30(金) 16:08:09
1/K!の計算でK=0から100までを計算する
プログラムを教えてください!
709デフォルトの名無しさん:2005/09/30(金) 16:33:46
>>708
無理。問題、教授に聞きなおせ。あとテンプレ使え。
710デフォルトの名無しさん:2005/09/30(金) 16:42:37
あ、悪ぃ
0除算になるかと思ったら、階乗だった
711デフォルトの名無しさん:2005/09/30(金) 17:01:56
行列の掛け算を計算するプログラムの宿題です。

os : Windows
コンパイラ : borlandC++
C言語
ライブラリは使えません。


int a[3][3] = {{1, 8, -6} , {5, -3, 4 }, {7, 10 ,9} } ;
int b[3][3] = {{2, -9, 4} , {6, -5, 8 }, {1, 15 ,12} } ;
int c[3][3];

とあるときaの行列とbの行列の積をcに入力するプログラムを作りたいのですが
aとbの行列の掛け算がうまくできません。

宿題の条件にwhileやforを使って計算しろとのことなのですが
行列の内積を求めるやりかたが分からないのです。

よろしくお願いします。
712デフォルトの名無しさん:2005/09/30(金) 17:12:23
>>711
  /* 行列の積の定義: C = A B  <=>  C_ij = Σ A_ik B_kj */
  int i, j, k;
  for (i = 0; i < 3; ++i) {
    for (j = 0; j < 3; ++j) {
      c[i][j] = 0;
      for (k = 0; k < 3; ++k) 
        c[i][j] += a[i][k] * b[k][j];
    }
  }

713デフォルトの名無しさん:2005/09/30(金) 17:16:46
>>708 誤差はどれくらい気にするの?
714713:2005/09/30(金) 17:58:07
>>708 って exp なら収束良いから桁落ちさえ避けときゃあんま問題無いね.
double fact(int k) {
  return k == 0 ? 1 : k * fact(k-1);
}
double e() {
  double S = 0;
  int k;
  for (k = 100; k >= 0; --k) S += 1.0/fact(k);
  return S;
}
715デフォルトの名無しさん:2005/09/30(金) 18:30:37
階乗の計算をプログラムで作ったんですが4桁に区切って計算しなさいという宿題です。
なぜに4桁じゃなきゃいけないんですか?5桁じゃダメなんでしょうか?
716デフォルトの名無しさん:2005/09/30(金) 18:36:26
>>715
unsigned intは多くの環境で2^32-1までしか表せない。
9999*9999<2^32-1に対して
99999*99999>2^32-1だから、5桁掛ける5桁は安全に計算できない。
717716:2005/09/30(金) 18:37:16
あと、たぶんすれ違い。
718デフォルトの名無しさん:2005/09/30(金) 18:41:59
>>715
古めのアルゴリズム本でshortの配列使って4桁ずつ計算してるやつが
ある。教官はそれでも読んだのでは?
719デフォルトの名無しさん:2005/09/30(金) 20:31:07
なあ、次のスレタイ
【尋ねる前に】C/C++の宿題を片づけます 50代目【>>1を読め】
とかにしないか
720デフォルトの名無しさん:2005/09/30(金) 20:51:11
お前が建てるなら文句はない。
721デフォルトの名無しさん:2005/09/30(金) 21:19:32
>>708 100までで十分な桁数計算しているかは知らない。適宜改行すること。
#include <stdio.h>
#define L 100 // 長さ(桁数の1/4+1)
#define B 10000
void d(int t[],int k){
int i,r=0,s;for(i=0;i<L;i++){s=t[i]+r*B;t[i]=s/k;r=s%k;}
}
void a(int e[],int t[]){
int i,c=0;for(i=L-1;i>=0;i--){e[i]+=t[i]+c;if(e[i]>=B){c=1;e[i]-=B;}else{c=0;}}
}
void p(int e[]){
int i;printf("%d.\n",e[0]);for(i=1;i<L;i++)printf("%04d ",e[i]);puts("");
}
int main(void){
int k,t[L],e[L];
for(k=0;k<L;k++)t[k]=e[k]=0;//初期化
t[0]=e[0]=1;//e=1.0000...;K=0の分だけ先に足しておく
for(k=1;k<=100;k++){
d(t,k);//t/=k;
a(e,t);//e+=t;
}
p(e);//printf("%.*f",L*4,e);
return 0;
}
722デフォルトの名無しさん:2005/09/30(金) 21:20:19
>>718
探してみたら、92年発行の
「C言語による初めてのアルゴリズム入門」にそんなん書いてあるわ
技術評論社/河西朝雄著の青い本でんな
723デフォルトの名無しさん:2005/09/30(金) 21:27:28
>>722
今手元にないせいで確認できんが、intじゃなかった?ついでに円周率も書いてるやつでしょ?
724デフォルトの名無しさん:2005/09/30(金) 21:38:56
>>723
shortでやってま。なにせ16ビット時代のコンパイラやから。
ほんで、>>716の問題をよけるために途中だけlongでんな

円周率はマチンの公式のサンプルコードが載ってますわ
725デフォルトの名無しさん:2005/09/30(金) 22:28:38
>>708
#include <iostream>
#include <functional>
#include <numeric>

using std::partial_sum;
using std::cout;
using std::accumulate;
using std::endl;

int main() {
double data[101] = {1};
cout << accumulate(data, partial_sum(data, partial_sum(data + 1, partial_sum(data,
data + sizeof(data)/sizeof(data[0]), data), data + 1), data, divides<double>()), 0.0) << endl;
}
726708:2005/10/01(土) 00:02:01
問題間違いでした。
答えてくれた優しい方々、ありがとう。
そしてすいません・・・。
727デフォルトの名無しさん:2005/10/01(土) 00:07:59
>>726
人生終わらせそうな勢いの書き込みだなおい
728デフォルトの名無しさん:2005/10/01(土) 00:41:33
e[N+2][2*N+2]

上記は1次元熱伝導問題を差分法で解くサンプルコードにあった配列なのですが、
どちらがx(位置)で、どちらがt(時間)を表しているのでしょうか?
何故両方ともN+2ではないのでしょうか? (Nは最大分割数)
729デフォルトの名無しさん:2005/10/01(土) 00:51:29
>>728
【尋ねる前に】C/C++の宿題を片づけます 50代目【>>1を読め】
730デフォルトの名無しさん:2005/10/01(土) 01:09:41
731デフォルトの名無しさん:2005/10/01(土) 04:11:20
多桁計算は自分もやっておかなければと(ry
732デフォルトの名無しさん:2005/10/01(土) 08:21:16
>>729
「尋ねる」はおかしい
「丸投げ」の方が適切
733デフォルトの名無しさん:2005/10/01(土) 10:04:16
>>732
本人は疑問を解決しようと尋ねてるつもりなんで、丸投げしてる意識はないんだよ
これもゆとり教育の賜物ですな
734デフォルトの名無しさん:2005/10/01(土) 10:39:43
こちらは答える義理はないのに、答えないと
「なんで教えてくれないの?」
735デフォルトの名無しさん:2005/10/01(土) 13:46:58
ゆとり教育

知ってるなら、なぜ指摘してくれなかったのですか?
http://pc8.2ch.net/test/read.cgi/unix/1016025117/54-58
736デフォルトの名無しさん:2005/10/01(土) 13:51:07
知ってるのに黙ってるのは日本人にありがちだよね
誘導的な事を言って大事なことを伝えないのは詐欺師の手口
詐欺師大国日本万歳
737デフォルトの名無しさん:2005/10/01(土) 14:10:41
>>736
これはまた切り返しが鮮やかな人ですねw
738デフォルトの名無しさん:2005/10/01(土) 14:15:17
>>737
触らないでやれよ。多分過去に詐欺で相当ひどい目にあったんだろ。
739デフォルトの名無しさん:2005/10/01(土) 14:16:49
>>738
ヒント: 鮮やかな人
740デフォルトの名無しさん:2005/10/01(土) 14:36:03
朝から鮮やかなのか
741デフォルトの名無しさん:2005/10/01(土) 14:42:25
なるほどそういう意味か
742デフォルトの名無しさん:2005/10/01(土) 15:47:40
詐欺師から来た挑戦?
743デフォルトの名無しさん:2005/10/01(土) 16:08:26
>>739
知ってるなら、なぜ押しててくれなかったのですか?
744デフォルトの名無しさん:2005/10/02(日) 10:20:14
[1] 授業単元: 情報処理
[2] 問題文:
  (1)元利合計が元金の2倍を超える年数を算出 (複利計算で。年利率をキーボードから入力) (不定回反復)
(2)発生した乱数の最大最小値探索 (一次元配列)
(3)発生した乱数のソート(同順処理を含む) (一次元配列)
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名:
 [3.3] 言語: C
[4] 期限: 2005年10月4日まで
[5] その他の制限: 構造化コーディングに配慮して書け

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

745デフォルトの名無しさん:2005/10/02(日) 11:28:20
>>744 (1)
#include <stdio.h>
int main() {
  double x, r;
  int k;
  while (scanf("%lf", &r) == 1) {
    for (x = 1, k = 0; x < 2; x *= r, ++k);
    printf("%d\n", k);
  }
}
746デフォルトの名無しさん:2005/10/02(日) 11:37:25
>>744 (2)
#include <stdio.h>
#include <stdlib.h>
#define N 20
int main() {
  int k, min, max, a[N];
  for (k = 0; k < N; ++k) a[k] = rand();
  for (k = 0, min = max = a[0]; k < N; ++k) 
    min = (min < a[k] ? min : a[k]), max = (max > a[k] ? max : a[k]);
  printf("min = %d, max = %d\n", min, max);
}
747デフォルトの名無しさん:2005/10/02(日) 11:53:54
>>744 (3) 面倒なのでバブルソート O(n^2)
#include <stdio.h>
#include <stdlib.h>
#define N 20
void swap(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; }
void sort(int *a, int n) {
  int i, j;
  for (i = 0; i < n; ++i)
    for (j = 1; j < n - i; ++j)
      if (a[j] < a[j-1]) swap(&a[j], &a[j-1]);
}
int main() {
  int k, min, max, a[N];
  for (k = 0; k < N; ++k) a[k] = rand();
  for (k = 0; k < N; ++k) printf("%d ", a[k]); printf("\n");
  sort(a, N);
  for (k = 0; k < N; ++k) printf("%d ", a[k]); printf("\n");
}
748744:2005/10/02(日) 13:37:52
>>745-747

ありがとうございました。
749デフォルトの名無しさん:2005/10/02(日) 17:05:27
すみません、お願いします。

[1] 授業単元: プログラミング宿題
[2] 問題文 : (1)三乗和相等の数字探索 (入れ子)
        (2)任意の数字n*nの魔方陣を求める
[3] 環境:windows 、言語:C言語
[4] 期限:明日12時
750デフォルトの名無しさん:2005/10/02(日) 17:11:07
>>749
問題文がよくわからん。言葉をちゃんと定義してくれ。
751デフォルトの名無しさん:2005/10/02(日) 18:38:06
>>749 -(1)
#include <stdio.h>

int main()
{
    int i,j,k;

    for(i=1; i<10; i++)
    {
        for(j=0; j<10; j++)
        {
            for(k=0; k<10; k++)
            {
                if(i*i*i+j*j*j+k*k*k == i*100+j*10+k)
                    printf("%d\n",i*100+j*10+k);
            }
        }
    }

    return 0;
}
752デフォルトの名無しさん:2005/10/02(日) 18:50:50
>>750
(1)が3桁の数のうち、各桁の三乗の総和がもとの数に等しい数(153など)を全て見つけて表示するプログラム
(2)が任意の数字nをキーボードから入力してn*nの魔方陣を作成して表示するプログラム
という意味です。わかりにくくてすみません。

>>751
大変参考になりました、ありがとうございます。
753≠749:2005/10/02(日) 20:00:31
魔方陣は奇数のとき基本的には右上に上がっていけばいいんだっけ?
偶数のときは半分のますを点対称に動かすんだっけ?
754デフォルトの名無しさん:2005/10/02(日) 20:22:50
>>753
奇数のときは(対称性があるがあるが一般的には)最下段中央から
右下に進んで数値の入っているマスにぶつかると
上に1個上がってまた右下に

偶数のときはシンネ
755デフォルトの名無しさん:2005/10/02(日) 21:06:20
正整数を入力し、それをローマ数字で表示するプログラムを配列を使って作りなさい。
1000がM, 100がC, 10がX, 1がIであるので、たとえば、123と入力するとCXXIII、1365はMCCCXXXXXXIIIIIと出力できればよい。
<入力例>
Input: 3247

<出力結果>
MMMCCXXXXIIIIIII

お願いします
756デフォルトの名無しさん:2005/10/02(日) 21:07:15
一応任意の n ≧ 3 について魔方陣は存在するな
適当なアフィン平面構成してやればよさげ
757デフォルトの名無しさん:2005/10/02(日) 21:09:22
関数化してください。

http://briefcase.yahoo.co.jp/light_blue_8671
問題はいってます
758デフォルトの名無しさん:2005/10/02(日) 21:13:51
>>755
だから>>1を読めって
759755:2005/10/02(日) 21:18:50
[1]プログラミング基礎
[2]正整数を入力し、それをローマ数字で表示するプログラムを配列を使って作りなさい。
1000がM, 100がC, 10がX, 1がIであるので、たとえば、123と入力するとCXXIII、1365はMCCCXXXXXXIIIIIと出力できればよい。
<入力例>
Input: 3247
<出力結果>
MMMCCXXXXIIIIIII
[3]環境
 [3.1] OS: Linux
 [3.2]
 [3.3] 言語: C/
[4]今日の23時59分まで
です。
760デフォルトの名無しさん:2005/10/02(日) 21:19:41
761デフォルトの名無しさん:2005/10/02(日) 21:20:59
マルチ相手でも暇だから答えとくか......
#include<stdio.h>
#include<string.h>
void print(int n){
    char tmp[36];
    char*p=tmp+36;
    char*t="IXCM";
    for(;n;n/=10){
        int c = n%10;
        memset(p-=c,*t++,c);
    }
    printf("%.*s\n",36-(p-tmp),p);
}
int main(){
    int n;
    scanf("%d",&n);
    print(n);
}
762デフォルトの名無しさん:2005/10/02(日) 21:26:56
>>760
うぁ・・・バレた・・・すまん・・・。
しかし俺の知力ではこれが限界・・・!
#include<stdio.h>
main(){
int i,j,n;
int a[4]{1000,100,10,1};
char b[4]{"M","C","X","I"};
printf("suuji\n");
scanf("%d",&i);
for(n=i;n<1000;n++){
n = n - a[0];
}

ぎゃおおおおぉぉぉんんん!!!
763761:2005/10/02(日) 21:30:16
あ、そうそう。
数字が負である場合、入力値が1万以上の場合の考慮、
6のときにIIIIIIで(VIじゃなくて)本当に良いのか?

とかはマルチ相手だからこっちが楽になるように無視したから
764デフォルトの名無しさん :2005/10/02(日) 21:32:03
757あとかんすう蚊だけなんで巣
だれか〜
765デフォルトの名無しさん:2005/10/02(日) 21:37:39
>>757
ファイルを読む
 入力:ファイル名
 出力:Bodyの配列、Bodyの有効個数
データ出力
 入力:Bodyの配列、Bodyの有効個数
 出力:(なし)
世代別集計
 入力:Bodyの配列、Bodyの有効個数、年齢下限、年齢上限
 出力:該当世代の平均身長、該当世代の平均体重
平均値出力
 入力:各世代の平均身長、各世代の平均体重
 出力:(なし)
766デフォルトの名無しさん :2005/10/02(日) 21:47:06
言いたいことは解るんですが・・・
どうするかわからないです(´Д⊂)
767759:2005/10/02(日) 21:48:13
>>761
ありがとう。
でも、これ提出したら流石にバレるな・・・。
習ってないことばかり使ってる・・・。
768472:2005/10/02(日) 21:49:42
テンプレぐらい読めやボケ
それから一回あの世に行ってから出直してこい
769765:2005/10/02(日) 21:52:49
>>766
テンプレに沿って再度質問しなおしてみたら?
770757:2005/10/02(日) 21:56:11
>>768私ですか???
[2] ファイル開けたら書いてる
[3]
 Linux
  Cです
[4] 期限: 明日
[5] 基本は全部習った

771デフォルトの名無しさん :2005/10/02(日) 22:02:21
けなしといて
答えてくれないんですか???
772757:2005/10/02(日) 22:03:26
あの、すいませんが
急いでいるので早くしてくれないでしょうか?
773デフォルトの名無しさん:2005/10/02(日) 22:04:34
今、2chから弾かれてて書き込み出来ないんだよね
774デフォルトの名無しさん:2005/10/02(日) 22:05:45
おれにはむずかしいからむりです
775デフォルトの名無しさん:2005/10/02(日) 22:05:50
>>766
質問と現行ソースをアップロードしないと、おそらく駄目だよ
776デフォルトの名無しさん:2005/10/02(日) 22:06:47
[1] プログラミング
[2] [課題4]品物の値段とお客の支払った金額を読み込んで、おつりが必要なときには、その額を貨幣の種類と枚数で表示するプログラムを作りなさい。
<入力例>
Input price: 7659
Input payments: 10000
<出力結果>
5000 yen: 0 mai
2000 yen: 1 mai
1000 yen: 0 mai
500 yen: 0 mai
100 yen: 3 mai
50 yen: 0 mai
10 yen: 4 mai
5 yen: 0 mai
1 yen: 1 mai

[3] 環境
 [3.1] Linux
 [3.2]
 [3.3] 言語: C
[4] 期限: 2005-10-03-00:00:00.0
[5] その他の制限: 配列a[i]とかを使って書く。まだ基本のfor,printf,scanf,ifぐらいしか使えない。

あと、>>759が確実に同じ大学の奴な件について・・・。
777デフォルトの名無しさん:2005/10/02(日) 22:07:37
>>772
757がsageをできる知能を持ち合わせていないという事実を無視している。
騙るならそのへんを気をつけな
778757:2005/10/02(日) 22:07:53
わからないのならそうと言って下さい
期待した私がバカでした
779757:2005/10/02(日) 22:08:27
>>777
あんた頭いいな
780デフォルトの名無しさん:2005/10/02(日) 22:13:58
>>776
配列使わないとダメなのかな・・・
781デフォルトの名無しさん:2005/10/02(日) 22:14:56
[1] 授業単元:C言語V
[2] 問題文(含コード&リンク):

#include<stdlib.h>
#define N (100)
int main(void){
int A[N];
int i;
for(i=0 ; i < N ; i++){
A[i]=i
}
return(EXIT_SUCCESS);
}


この問題について、for文で示される部分を関数を用いて書き改めよ。
ただし、関数名はsetvalueとし、引数として配列と配列のサイズの2つをとるものとする。

[3] 環境
 [3.1] OS: Linux Fedora Core 4
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 2005年10月3日 AM1:00
[5] その他の制限: gcc -Wall -ansi ****.cにてコンパイラができるように生成する。


書き換え系統、さっぱりです…。
皆様方、助けてください。お願いいたします…。
782デフォルトの名無しさん:2005/10/02(日) 22:15:36
>>776
#include<stdio.h>
int coin[]={5000,2000,1000,500,100,50,10,5,1};
void calc(int coin,int*coins){
    for(;coin;coin%=*coins++)printf("%d yen: %d mai\n",*coins,coin/ *coins);
}
int main(){
    int price,payments;
    printf("Input price: ");scanf("%d",&price);
    printf("Input payments: ");scanf("%d",&payments);
    calc(payments-price,coin);
}
783デフォルトの名無しさん:2005/10/02(日) 22:23:53
>>781
#include<stdlib.h>
#define N (100)
void setvalue(int x[], int sz) {
  int i;
  for(i=0 ; i < sz ; i++){
    x[i]=i;
  }
}
int main(void){
  int A[N];
  setvalue(A, N);
  return(EXIT_SUCCESS);
}
784デフォルトの名無しさん:2005/10/02(日) 22:24:33
>>780
はい、配列は使わないとダメらしいです。
785デフォルトの名無しさん:2005/10/02(日) 22:28:14
コインの枚数ぐらい自分でしろよ!!
757自分で刺していただきました。
786デフォルトの名無しさん:2005/10/02(日) 22:29:04
>>778
1の注意点をよく読んだ上でテンプレ埋めないとおそらく誰もやらんよ
それに757の画像も、『出題例』、『解答例』であって問題そのものではないようだし…
787デフォルトの名無しさん:2005/10/02(日) 22:29:46
>>782
ありがとうございます。
中身はよくわからない所もありますが、そこは自分で調べていきます。
788デフォルトの名無しさん :2005/10/02(日) 22:32:49
757あれを関数化するのが問題だ
って書いただろが!!先に
789781:2005/10/02(日) 22:36:38
>>783

ありがとうございます!!
790デフォルトの名無しさん:2005/10/02(日) 22:37:43
>>787
ポインタとか使ってるけど大丈夫なのかw
791787:2005/10/02(日) 22:44:39
いえ、正直なところ自分の知識ではポインタについては全然わかりません・・・。
ポインタというのを使わないでプログラムを書くとどんな感じになるんでしょうか?
792782:2005/10/02(日) 22:48:15
>>791
少し動作変わるけど、こんな感じ。

#include<stdio.h>
void calc(int coin){
    int coins[9] = {5000,2000,1000,500,100,50,10,5,1};
    int i = 0;
    for(i=0;i<9;++i){
        printf("%d yen: %d mai\n",coins[i] , coin / coins[i]);
        coin %= coins[i];
    }
}
int main(){
    int price,payments;
    printf("Input price: ");scanf("%d", &price);
    printf("Input payments: ");scanf("%d", &payments);
    calc(payments - price);
}
793デフォルトの名無しさん:2005/10/02(日) 22:49:47
>>788
何をどう関数化するの?
解答例を丸ごとサブパーツ化?入出力と計算の分離? それとももっと他の事? 作成者の裁量?

>・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
とあるように、757は例題でなく問題文全文コピペ汁。テンプレも埋めれ。
794デフォルトの名無しさん:2005/10/02(日) 23:02:14
>>770にテンプレはある。
解答例を丸ごとサブパーツ化!
問題文全文コピペは解りにくいのはごめんなさい(´Д⊂)
795787:2005/10/02(日) 23:03:06
>>792
おお!ありがとうございます。さっきのよりも分かります!
自分はまだ、main(){〜〜}の中で全部終わらせるプログラムしか作れないので・・・がんばらないと・・・。

796782:2005/10/02(日) 23:05:47
>>795
あー関数習ってないのか
じゃあ、こんな感じで。

#include<stdio.h>
int main(){
    int price,payments;
    int coins[9] = {5000,2000,1000,500,100,50,10,5,1};
    int i = 0;
    int coin;
    printf("Input price: ");scanf("%d", &price);
    printf("Input payments: ");scanf("%d", &payments);
    coin = payments - price;
    for(i=0;i<9;++i){
        printf("%d yen: %d mai\n",coins[i] , coin / coins[i]);
        coin %= coins[i];
    }
    return 0;
}
797デフォルトの名無しさん:2005/10/02(日) 23:11:14
test
798デフォルトの名無しさん:2005/10/02(日) 23:13:17
jnz LOOP_END
799デフォルトの名無しさん:2005/10/02(日) 23:13:26
test2
800798:2005/10/02(日) 23:15:18
>>799
そんなアセンブラの命令あったっけ?
801デフォルトの名無しさん:2005/10/02(日) 23:16:50
ここCかC++では・・・
802794:2005/10/02(日) 23:19:39
毛なさレゾン下
803デフォルトの名無しさん:2005/10/02(日) 23:54:35
>>782
これはバグってないか?
ループが止まらない気ガス
804803:2005/10/02(日) 23:56:49
>>803
事故レス
すまソ
グローバルとパラメータの coin の意味が違うから錯覚しただよ
805782:2005/10/03(月) 00:02:05
自分もそのへんは紛らわしいと思って後で書いたほうは、こっそり修正した。
誤解を招きやすいコード書いてすまん。
806デフォルトの名無しさん:2005/10/03(月) 00:03:58
>>804-805
素直でいいやつらだな、おまいら。和んだ。
807802:2005/10/03(月) 00:12:30
ごめんよ〜
だいぶ荒らして。。。
808デフォルトの名無しさん:2005/10/03(月) 00:13:00
俺は>>782がわざわざ&nbsp;使って半角スペースでインデントしてることに和んだ。
809デフォルトの名無しさん:2005/10/03(月) 00:13:01
>>807
日本語からやりなおせ
810807:2005/10/03(月) 00:21:34
脳みそコンパイルえら〜
811デフォルトの名無しさん:2005/10/03(月) 00:27:53
[2] ファイル開けたら書いてる
[3]
 Linux
  Cです
[4] 期限: 明日
[5] 基本は全部習った


>>757  の誰か、ファイルを読む
 入力:ファイル名
 出力:Bodyの配列、Bodyの有効個数
データ出力
 入力:Bodyの配列、Bodyの有効個数
 出力:(なし)
世代別集計
 入力:Bodyの配列、Bodyの有効個数、年齢下限、年齢上限
 出力:該当世代の平均身長、該当世代の平均体重
平均値出力
 入力:各世代の平均身長、各世代の平均体重
 出力:(なし)
これでやったの、見せて(・ω・)
812811:2005/10/03(月) 00:29:10
解答例を関数かで。。。
813デフォルトの名無しさん:2005/10/03(月) 00:43:29
>>811
やったのだがソース死んだ
リソース不足で上書き保存失敗なんて人生初だ…
サイズ0になってるし…
鬱だ…

>>757の重たい画像のせいだな…
814812:2005/10/03(月) 01:03:35
ごめんよ
明日テストでどうしても必要でね・・・・・
(〃*`Д´)どうしたらいいんだよぉ!!!!
こっちが鬱だ
815デフォルトの名無しさん:2005/10/03(月) 01:06:15
困ってくれるほうが俺としては楽しそうなので、
そのままテストにGO
816デフォルトの名無しさん:2005/10/03(月) 01:06:52
わかった。やってみよう。
すまんが、俺の環境では見れないので、テキストファイルに打ち込んでくれ>814
817デフォルトの名無しさん:2005/10/03(月) 01:10:09
もれもテキストになってるなら>814
818744:2005/10/03(月) 01:28:39
>>744の(3)ですが、
>>747のようなプログラムの形はまだ習っておらず自分にはわからないので
できればmain(){〜〜}の中で全部終わらせるプログラムでお願いしますm(._.)m
819814:2005/10/03(月) 01:29:55
30分まって(;´д`)
820744:2005/10/03(月) 01:30:03
sage忘れスマソ
821デフォルトの名無しさん:2005/10/03(月) 01:32:56
>>818 どんな形がだめで、どんな形ならよいですか?
822デフォルトの名無しさん:2005/10/03(月) 01:33:52
>>821
関数使うなってことじゃね?習ってないなら説明できんだろ
823デフォルトの名無しさん:2005/10/03(月) 01:34:29
あとは#defineマクロ辺り
824デフォルトの名無しさん:2005/10/03(月) 01:51:16
825811:2005/10/03(月) 02:13:31
>>824様
ありがとう!!!!
そのばにいたら、抱きしめてる(#゜-゜#)
826デフォルトの名無しさん:2005/10/03(月) 02:17:07
30分待ってオチはそれでつか。
827811:2005/10/03(月) 02:21:28
出そうとしたら、書いてくれてた(>Д<)ゞ
828827:2005/10/03(月) 02:25:59
マジどんな人が書いたか、知りたい (=゚ω゚)
829デフォルトの名無しさん:2005/10/03(月) 02:32:11
粘着禁止
830デフォルトの名無しさん:2005/10/03(月) 02:36:40
冗談だよ(>Д<)ゞ
歳離れてそうだし〜
831824:2005/10/03(月) 03:09:41
>>825
デブお断り
832デフォルトの名無しさん:2005/10/03(月) 03:11:59
デ部じゃない(〃*`Д´)
ちょい身長が高いだけだ!!
833デフォルトの名無しさん:2005/10/03(月) 03:14:51
ところで。>824動いてます?
834824:2005/10/03(月) 03:16:19
>>832
ネカマもお断り
835デフォルトの名無しさん:2005/10/03(月) 03:16:54
SEさんなら池照
836832:2005/10/03(月) 03:18:52
女やっての!!!
837824:2005/10/03(月) 03:21:55
>>836
じゃあお礼の写メちょーだい
[email protected]
838デフォルトの名無しさん:2005/10/03(月) 03:23:46
釣!
839デフォルトの名無しさん:2005/10/03(月) 03:24:27
うーむ。なんか、今回はほのぼのとしたチャットだのぉ。
840デフォルトの名無しさん:2005/10/03(月) 03:29:15
>>837のアドレスをググるw
841デフォルトの名無しさん:2005/10/03(月) 03:36:53
[1] 授業単元: ソケットプログラミング
[2] 問題文(含コード&リンク):
メールを送信するプログラムmysendmailを書け。
mysendmail あて先 サブジェクト 本文ファイル名
として起動する。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:
[5] その他の制限: ネタでつ本気にしないよーに。
842デフォルトの名無しさん:2005/10/03(月) 03:41:23
>>841
自力で送信するのか?sendmailなどを使っていいのか
複数のあて先やBCCなど、どう対応させるのか書け
ソケットプログラミングなんて授業あるのか?どこの学校か書いてくれないか
843デフォルトの名無しさん:2005/10/03(月) 03:42:40
>>842
はぁ?
844デフォルトの名無しさん:2005/10/03(月) 03:47:19
>>843
あぁ?何がはぁ?だよ
言いたいことがあったら言えや
845デフォルトの名無しさん:2005/10/03(月) 03:48:58
>842
自力だろう。sendmailは使わない方針で。
授業の一環として1〜3コマくらいで、やるネタかもしれんな。
とりあえず、1件のToとサブジェクトだけでいーんじゃない?
846デフォルトの名無しさん:2005/10/03(月) 03:50:46
>>844
はぁと
847デフォルトの名無しさん:2005/10/03(月) 03:51:00
>>840
ありがとう。
感謝する。
なんでPINKちゃんねるなんか見てたのか分からない・・・
848デフォルトの名無しさん:2005/10/03(月) 03:51:35
>>844
イタタタ
849sleepy:2005/10/03(月) 03:52:12
メールキター!
850デフォルトの名無しさん:2005/10/03(月) 03:53:20
>>846
頭ぶっこわれてんじゃねえか?お前
842の内容でなんではぁと、だ?気持ち悪い
病院にでも行って来いや
851デフォルトの名無しさん:2005/10/03(月) 03:56:20
>>837のメールアドレスをyahooで検索すると(略
852sleepy:2005/10/03(月) 03:56:54
でも、こういうもんもらってもしょうがないんだけど
http://img-box.ddo.jp/chinko/img/img20050930081408.jpg
853デフォルトの名無しさん:2005/10/03(月) 04:08:40
その、まンなかのって、見覚えあるぞ。
よく、足の裏で、なでてあげたけど。
元気そうだね。
854sleepy:2005/10/03(月) 04:26:33
すいません。
誰か↓の
パソコン初心者総合質問スレッド Vol.1123
http://pc8.2ch.net/test/read.cgi/pcqa/1125129039/

973 :ひよこ名無しさん :2005/08/28(日) 20:09:58 ID:??? >>971. [email protected]. トウキョウミナトク ...

このへんのログ持ってませんか?
OpenJane 本体とログのすべてを削除されてしまったんですが、
なんで自分のメアドさらし、「トウキョウミナトク」なんて書き込みしたのか知りたいんですが。
855本物の824:2005/10/03(月) 06:09:10
>>831
>>834
>>837
おぉ、寝てる間に漏れの偽者が!
856デフォルトの名無しさん:2005/10/03(月) 06:11:47
4時間半待ってオチはそれでつか。
857744:2005/10/03(月) 06:46:47
>>822
その通りです

>>823
一応#defineに関しては調べて理解できました。
858デフォルトの名無しさん:2005/10/03(月) 08:15:25
usage ←これって何て読むんですか?
859デフォルトの名無しさん:2005/10/03(月) 08:23:23
うさげ
860デフォルトの名無しさん:2005/10/03(月) 09:23:59
>>858
ゆーせーじ
とマジレス
861デフォルトの名無しさん:2005/10/03(月) 10:47:26
>>858
ttp://dictionary.goo.ne.jp/search.php?MT=usage&kind=ej
これ見る限り、日本語風に表記すると「ゆーしじゅ(ゆーじじゅ)」になるね。
私が聞く限りもそう聞こえたし、少なくとも>860の言うような「ゆーせーじ」とは聞こえない。
862デフォルトの名無しさん:2005/10/03(月) 10:51:48
別に読み方なんて理解できりゃいいだろ
俺はゆーぜーじって読んでるがな
863デフォルトの名無しさん:2005/10/03(月) 11:25:22
>>861
英語のちゃんとした発音では「〜age」は「〜いっぢゅ」てな感じになることが多いが、日本人としては
advantage → アドバンテージ
language → ランゲージ
のように「〜えーじ」とすることが多く、十分通じるんだから「ユーセージ」は妥当じゃないか?
おまえ、まさか日本人に向かってアドゥヴァーンティッジュとか発音してんの?

つーかどうでもいいネタを掘り下げてすまんかったorz
864デフォルトの名無しさん:2005/10/03(月) 12:10:59
ゆーせーじって言うより、ゆーせっじの方が近いんじゃないだろうか。
865861:2005/10/03(月) 12:15:16
>>863
同様に、「あどばんてぃじゅ」「らんぐうぃじゅ」と聞こえるね。
#実際日本人が日本人向けになんと発音するかは知ったこっちゃない。
866デフォルトの名無しさん:2005/10/03(月) 15:00:12
[1] 授業単元: データ構造アルゴリズム実習
[2] 問題文(含コード&リンク):
1:配列を使う
n×n(nは奇数)の正方形のマスの中に、1〜n^2までの数字を入れて、
各行・各列・対角線のそれぞれの合計が全て同じになるように並べるプログラムを作成。
2:ポインタを使う
要素数10個の整数配列を用意する。
その要素を昇順に並べ替えるプログラムをシェルソートを使って作成する。
比較幅は1,4,13,40…(前の数字×3+1)という数列の中の数を使用する。

[3] 環境
 [3.1] OS: solaris
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2005/10/5
[5] その他の制限: 特にありません。
867デフォルトの名無しさん:2005/10/03(月) 15:03:55
>>866
嫌です。
868866:2005/10/03(月) 15:04:44
>>867
あんたには頼んでねーよヴォケ!
という事で、どなたかボランティアだと思ってお助け下さい。
869866:2005/10/03(月) 15:09:51
↑偽者でしょうか・・
すみません、よろしくお願いします。
870デフォルトの名無しさん:2005/10/03(月) 15:11:23
すごく…難しいです
871デフォルトの名無しさん:2005/10/03(月) 15:30:21
とても無理です。
872デフォルトの名無しさん:2005/10/03(月) 15:41:11
>>866-871自演乙
ネタじゃないなら初めからトリップ付けな
873866 ◆CH2.riw5Jk :2005/10/03(月) 16:03:26
自演はしません。
トリップ付けました。
874デフォルトの名無しさん:2005/10/03(月) 17:03:39
ここは偽者だらけのインターネットですね
875デフォルトの名無しさん:2005/10/03(月) 17:41:31
魔方陣
で検索すれば
876858:2005/10/03(月) 17:49:04
>>859
>>860
>>861
>>863
皆さんありがとうございます。
usageは、決まった読み方っていうのが無いんですね・・・。
わかりました。私は、『ユース・エッジ』と呼ぼうと思います

皆さんに『ユース・エッジ』と読んでいただけると、ユース・エッジのシェアも広がります
877デフォルトの名無しさん:2005/10/03(月) 18:02:11
>>876
うるせー馬鹿
878デフォルトの名無しさん:2005/10/03(月) 18:17:38
[1] プログラミング
[2] ファイルを16進数2桁表示、アスキー表示にダンプし、アドレスを指定すれば編集できるバイナリエディタを作成する。
1ダンプ表示
起動時に指定された、ファイルをオープンし8Byte/ 行、16進数のアスキー表示をすべて表示
アスキー表示は、対応の字がない場合ピリオド表示。
2先頭からの位置指定、その位置データの書き換え
機能1と同時にファイルをオープンし、先頭からのバイト数を指定し、指定された位置のデータを表示後、データ修正値を受け付ける。
ポイント
ファイルをバイト単位でアクセス
ファイルをランダムアクセス
データ型char int 10進数 16進数の理解
[3] 環境
 [3.1] OS: Linux
 [3.3] 言語: C
[4] 期限:明日


879デフォルトの名無しさん:2005/10/03(月) 18:17:43
[1] 授業単元: C言語 アルゴリズム(独習)
[2] 問題文(含コード&リンク): 
    異なるn個の文字(数字)を辞書順に列挙する
    例)
    123
    132
    213
    231
    312
    321
    
    (1344など同じ数を複数個含む例は考えなくてよい)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/948.c
 ここまでできたのですが途中からうまくいってません

[3] 環境 
 [3.1] OS: Windows 
 [3.2] コンパイラ名とバージョン: gcc 3.4.2
 [3.3] 言語: C
[4] 期限:2005年10月07日
[5] その他の制限: どういうことをやっているかを見るため
そのものズバリの関数(もしあるなら)を使うのは無しで
880デフォルトの名無しさん:2005/10/03(月) 19:03:22
>>866
つ「魔法陣の作り方」
881デフォルトの名無しさん:2005/10/03(月) 19:06:52
魔法作ってどうする
882デフォルトの名無しさん:2005/10/03(月) 19:08:12
>>852 私がおくったのでは、ないよ!!
883デフォルトの名無しさん:2005/10/03(月) 19:53:47
>>882
成りすましなんかほっとけ
884デフォルトの名無しさん:2005/10/03(月) 20:23:11
>>879
next_set() 内の論理がわからなかったので書き替えました。rev() は使ってません。
void uppersort(int *a, int limit)
{   /* バブルソート:手抜き */
    for(int c=0; c<=limit; c++) {
        for(int b=1; b<=limit; b++) {
            if(a[b]>a[b-1])
                swp(a+b-1, a+b);
        }
    }
    return;
}

int next_set(int *a,int n){
    int maxi;
    for(int i=1; i<n; i++) {
        if(a[i-1]>a[i]) {    /* 昇順になっている最下桁対を見つける */
            maxi=-1;
            for(int j=0; j<i; j++) { /* 該当部を次の数字に置き換える */
                if(a[j]>a[i] && (maxi==-1 || a[j]<a[maxi]))
                    maxi=j;
            }
            swp(a+i, a+maxi);
            uppersort(a,i-1); /* 該当部より下の桁は昇順に初期化 */
            return 0;
        }
    }
    return -1;
}
885879:2005/10/03(月) 21:15:45
>>884
なんとか解決できました。ありがとうございます

rev()を使ったのは 15432→21345で
15432から1と2を入れ替えたら25431と「5431」が降順になり
その部分だけひっくり返せば完了。それで「1」「2」にあたる
ものをどうやって見つけるかでつまずいてました。
886& ◆Ubjjh71Tw. :2005/10/03(月) 23:18:16
[1] 授業単元:画像関連の科目

[2] 問題文(含コード&リンク):2値画像ファイルを読み込んで、その画像ファイルを碁盤の目のような感じでM x Nの小さい正方形たちに区切る。
その正方形ひとつひとつにつき、正方形内に占める黒画素の割合をそれぞれ計算して出力する。出力はグラフでも数値でもよい。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C/C++/どちらでも可
[4] 期限: [2005年10月6日まで]
[5] その他の制限: 画像ファイルはpgm形式
887デフォルトの名無しさん:2005/10/03(月) 23:30:18
ほぅむ・あどばんてぃじゅ
ばでぃ・らんぐうぃじゅ
888デフォルトの名無しさん:2005/10/03(月) 23:36:21
らんがーじゅ
889744:2005/10/03(月) 23:38:42
[1] 授業単元: 情報処理
[2] 問題文:
  (1)発生した乱数のソート(同順処理を含む) (一次元配列)
  (2)表の二次元処理(二次元配列)
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名:
 [3.3] 言語: C
[4] 期限: 2005年10月4日20時まで
[5] その他の制限: 構造化コーディングに配慮して書け
            関数は使うな

追加、修正がありましたのでこちらもお願いしますm(._.)m

表の二次元処理は、


          教科1   教科2  教科3   ……   平均
     001   点数a  点数b   点数c
     002   点数d  点数e   点数f
     003   点数g  点数h   点数i

     …
     
     平均

のように表示するものです。




890デフォルトの名無しさん:2005/10/03(月) 23:49:56
[1] C言語
[2]1、繰り返しを用いて、二次元配列のタテとヨコの合計を求めよ
2、アルファベット1文字(大文字)を入力し、それを小文字に変換する関数を作れ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語: C
[4] 期限:明日
[5] その他の制限:
891デフォルトの名無しさん:2005/10/04(火) 00:30:44
>>866
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/951.txt
魔法陣
入力の方は自分で作ってくれ。
途中安全性を端折った。
892デフォルトの名無しさん
魔方陣な。