ぼるじょあがC/C++の宿題を片付けますYO! 37代目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
(・3・)エェー C++房のぼるじょあですYO!わからない宿題を片づけますYO!
――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
・複雑なAAはスレが荒れたり問題が埋もれる原因になりますので使用を控えてください。
―――――――――――――――――――――――――――――――

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか
[5] その他の制限:

【アップローダー】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

【歴代スレは>>1-10辺り】
36代目: http://pc5.2ch.net/test/read.cgi/tech/1102753497/
35代目: http://pc5.2ch.net/test/read.cgi/tech/1101568895/
34代目: http://pc5.2ch.net/test/read.cgi/tech/1100530682/
33代目: http://pc5.2ch.net/test/read.cgi/tech/1097932699/
32代目: http://pc5.2ch.net/test/read.cgi/tech/1097592876/
31代目: http://pc5.2ch.net/test/read.cgi/tech/1095075678/
30代目: http://pc5.2ch.net/test/read.cgi/tech/1091954342/
29代目: http://pc5.2ch.net/test/read.cgi/tech/1090765027/
2デフォルトの名無しさん:04/12/25 03:44:21
28代目: http://pc5.2ch.net/test/read.cgi/tech/1089974839/
27代目: http://pc5.2ch.net/test/read.cgi/tech/1089448445/
26代目: http://pc5.2ch.net/test/read.cgi/tech/1088860889/
25代目: http://pc5.2ch.net/test/read.cgi/tech/1087929711/
24代目: http://pc5.2ch.net/test/read.cgi/tech/1086612317/
23代目: http://pc5.2ch.net/test/read.cgi/tech/1085149383/
22代目: http://pc5.2ch.net/test/read.cgi/tech/1083050221/
21代目: http://pc5.2ch.net/test/read.cgi/tech/1078157730/
20代目: http://pc5.2ch.net/test/read.cgi/tech/1075217631/
19代目: http://pc5.2ch.net/test/read.cgi/tech/1073566342/
18代目: http://pc5.2ch.net/test/read.cgi/tech/1071407728/
17代目: http://pc5.2ch.net/tech/kako/1070/10704/1070469896.html
16代目: http://pc5.2ch.net/tech/kako/1069/10698/1069837000.html
15代目: http://pc5.2ch.net/tech/kako/1068/10689/1068950713.html
14代目: http://pc5.2ch.net/tech/kako/1067/10671/1067175933.html
13代目: http://pc5.2ch.net/tech/kako/1064/10645/1064541405.html
12代目: http://pc5.2ch.net/tech/kako/1060/10607/1060706382.html
11代目: http://pc5.2ch.net/tech/kako/1058/10582/1058283913.html
10代目: http://pc5.2ch.net/tech/kako/1057/10570/1057070174.html
9代目: http://pc5.2ch.net/tech/kako/1055/10559/1055944101.html
8代目: http://pc5.2ch.net/tech/kako/1055/10550/1055056940.html
7代目: http://pc5.2ch.net/tech/kako/1053/10539/1053963794.html
6代目: http://pc5.2ch.net/tech/kako/1053/10530/1053045530.html
5代目: http://pc5.2ch.net/tech/kako/1051/10515/1051594046.html
4代目: http://pc5.2ch.net/tech/kako/1045/10450/1045074808.html
3代目: http://pc5.2ch.net/tech/kako/1041/10419/1041992392.html
2代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
1代目: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html
3デフォルトの名無しさん:04/12/25 03:48:59
ノノ*^ω^)<次はもきゅえりりんがC/C++の宿題を片付けますよ?
4デフォルトの名無しさん:04/12/25 04:20:19
         ヘ  o ,    ── /   __,   /  _,   /_/_/       __,   /
          /  \ ´   ── /        /   ─'  /    _       / 
         _/    \   __ /   ___/   ___/     /   ___/
                                     ̄ ̄ ̄
                    _ , ― 、
                  ,−'  `      ̄ヽ_
                 ,'            ヽ
                (   `ー'ー'ヽ`ー'ー'ヽ  )        
               (  ノ ''''''   '''''':::::::ヽ  )
               ( . )(●),   、(●)、.:( ) +
               ( )   ,,ノ(、_, )ヽ、,, .::::( )    <ヨン様が華麗に4get!
               . ヽ )   `-=ニ=- ' .:::::::|ノ  +
                  \  `ニニ´  .:::::/      +
               ,,.....イ.ヽヽ、ニ__ ーーノ゙-、.
               :   |  '; \_____ ノ.| ヽ i






5デフォルトの名無しさん:04/12/25 04:32:46
ぼるじょあスレッドキターーーーーーーーーーーーーーーーーーーーーーーーーー!!!!!!
>>1
GJだYO!
6終了しますた。。。:04/12/25 04:50:13
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ
7終了しますた。。。:04/12/25 04:53:03
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ
8デフォルトの名無しさん:04/12/25 08:36:14
>>1
トリップついていないぞ。
9ぼるじょあ ◆yBEncckFOU :04/12/25 15:16:50
(・3・)エェー ただの付け忘れだYO
10デフォルトの名無しさん:04/12/25 15:20:27
>>1 乙オツ
11前スレ990-972:04/12/25 19:17:26
>>1
12デフォルトの名無しさん:04/12/25 20:45:40
>前スレ993
使った数字何回でも使ってよければ0000以外何でもできると思うぞ
13デフォルトの名無しさん:04/12/25 21:40:53
>>13
結論から言うと、4つの数字を一回ずつ使って10にするという昔からある算数パズル。
poland.txtを取り込んで逆ポーランドから演変換するのは作ったけど
もともとの課題がそれでいいのかどうかわからんので保留中。
14デフォルトの名無しさん:04/12/25 23:48:31
数学スレ池
15デフォルトの名無しさん:04/12/25 23:51:21
[2] 問題:音源と幾何情報を1chとする音声のマルチチャネル伝送
[3] 環境
 [3.1] OS:Win
 [3.2] コンパイラ:Visual Studio
 [3.3] 言語:C/C++/どちらでも
[4] 期限:2004年12月27日午前中

チャットくらいはなんとかなったのですが
音声通信の所がどうも理解できません。
ヒント程度でいいので、よろしくお願いいたします。
16デフォルトの名無しさん:04/12/26 01:51:20
>>15
そんな短期間で作成して提出しなければならない宿題なのか?
17デフォルトの名無しさん:04/12/26 04:14:15
>16
いえ、もうちょっと猶予があったんですが
自分でなんとかしようともがいているうちにこんな状態に‥orz
18デフォルトの名無しさん:04/12/26 04:35:56
仕事を宿題と偽ってここにうpすうrな
19デフォルトの名無しさん:04/12/26 04:48:58
仕事じゃなくて釣りだろ。
仕事でちょっとでもプログラムやってるようなら、こんな馬鹿くさい質問の仕方ができるわけない。
20デフォルトの名無しさん:04/12/26 18:56:56
てか、躓いてるのはCじゃないじゃん。
環境依存だし。
21デフォルトの名無しさん:04/12/27 23:56:10
俺様がクールにあげてやるぜ
22デフォルトの名無しさん:04/12/28 13:00:18
クールとフールの違い分かる?
23デフォルトの名無しさん:04/12/28 13:30:00
>>15
oggに変換してソケット?
24デフォルトの名無しさん:04/12/28 16:25:34
俺様がフールにあげてやるぜ
25しゅんぺい ◆Ib0wMmHGGI :04/12/29 01:25:37
[1] 授業単元:
[2] WAVEファイル(PCMでステレオ・モノラルなどの各種形式は問わない)のデータの位相を反転させ、元のデータと合成することによって、無音になることをプログラムを作成し実証しなさい。
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ(バージョン): Visual Studio6
 [3.3] 言語:C
[4] 期限:2005年01月15日 8:50まで
26デフォルトの名無しさん:04/12/29 01:32:46
>>25
形式を指定して下さい。あなたが。
27デフォルトの名無しさん:04/12/29 08:50:58
当たり前すぎて宿題なんだろうか・・・・・?
28デフォルトの名無しさん:04/12/29 18:52:41
すみません、どなたか36代目のスレッドのファイルくれませんか?
29デフォルトの名無しさん:04/12/29 19:29:24
30デフォルトの名無しさん:04/12/30 00:11:28
皆さん、冬休みの宿題は早めに依頼しておきましょうねぇage
31しゅんぺい ◆Ib0wMmHGGI :04/12/30 09:26:20
>>25
どうやら、形式を問わないとは、モノラルでもステレオでも8bitでも16bitでも、どの形式でも読み込めるということらしいです。
32デフォルトの名無しさん:04/12/30 09:42:32
形式を判定する関数くらいは作ってくれないと
33しゅんぺい ◆Ib0wMmHGGI :04/12/30 14:29:23
すみません。
でも、素人的な見解ですけど、データ部分について、位相反転させればいいってことは、ステレオ、モノラルは問わないってことですよね?
後、必要な情報は、8bitか16bitだけってことですから・・・・。
生意気な口利いて申し訳ないのですが、waveファイルから8bitか16bitのデータを読み出して、そのまま保存するプログラムを作成してもらえませんか?
残りの合成やら、他の事に関しては、私が自分でやります。お願いします。
34デフォルトの名無しさん:04/12/30 14:35:49
だからお前が形式を判定するプログラム作れよ。
プログラミングとしては、合成やらなんやらするよりよっぽど簡単な作業だろ。
WAVEフォーマットについて調べるのが面倒とか言うなよ?
35デフォルトの名無しさん:04/12/30 14:49:58
> そのまま保存するプログラムを作成してもらえませんか?

氏ね。
36デフォルトの名無しさん:04/12/30 15:45:37
任意の数を入力して入力し終わったら、そこからランダムで6個の数字を
取り出すプログラムを教えて下さい。
37デフォルトの名無しさん:04/12/30 16:05:00
int i=atoi(gets()),j=0,a[20];while(i){a[j]=i%10;i/=10;j++;}
j--;
for(i=0;i<6;i++)printf("%d\n",a[bound_rand(0,j)]);
38デフォルトの名無しさん:04/12/30 16:25:10
JPEGからPNG
PNGからGIP
GIFからBMP
上記プログラムを別々に作成しなければいけません。
環境はVC6.0またはBorlandC++でも可です。
1月4日までに必要なのでよろしくお願いします。
可能ならどこかのサイトにアップしてください。
だめならここに分割して乗せてください。
39デフォルトの名無しさん:04/12/30 16:33:39
char s[22];//NOTE:スタック溢れの危険
…gets(s)…

int b_rand(lo,hi)int hi,lo;
{
//RAND_MAXとrand()でかけ
}
40デフォルトの名無しさん:04/12/30 16:35:57
ただでやるもんか
41デフォルトの名無しさん:04/12/30 16:38:48
画像の変換めんどくせえよ・・・
42デフォルトの名無しさん:04/12/30 16:41:00
補足です。
JPEGからPNGとありますが直接が難しい場合は
JPEG⇒BMP⇒PNG
でもかまいません。ただ、既存のライブラリを使ってはだめといわれました。
よろしくお願いいたします。
43デフォルトの名無しさん:04/12/30 16:45:56
できたら金くれる?
44デフォルトの名無しさん:04/12/30 16:49:21
1モリタポあげる
4542 ◆opL87fRjm. :04/12/30 16:51:17
>>43
私が理解できて自分で先生に説明できるぐらいわかりやすいものを作っていただけるのでしたら。
一つあたり5000円でいかがでしょうか?
46デフォルトの名無しさん:04/12/30 16:55:26
断る
4742 ◆opL87fRjm. :04/12/30 16:57:21
>>46
わかりやすいものは作れないってことでしょうか?
ある程度までなら妥協しますが・・・
48デフォルトの名無しさん:04/12/30 17:22:23
ま、4日まで頑張れ。LZ77展開くらいまでは作れるだろ。
49デフォルトの名無しさん:04/12/30 17:28:58
て言うかそんなもん5000円で作るくらいだったら商用ライブラリにするよ。
50デフォルトの名無しさん:04/12/30 17:31:16
そういえば前、中間記法で書かれた計算式の文字列を計算するだけのコード書いて
1万貰ったな。
51デフォルトの名無しさん:04/12/30 17:37:36
>>36
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <vector>

int main()
{
    std::srand(static_cast<unsigned int>(std::time(0)));
    std::vector<int> v;
    int temp;
    while (std::cin >> temp)
        v.push_back(temp);
    std::random_shuffle(v.begin(), v.end());
    if (v.size() >= 6)
        for (int i = 0; i < 6; ++i)
            std::cout << v[i] << std::endl;
    else
        std::cout << "指定した数が少ないです" << std::endl;
    return 0;
}
52デフォルトの名無しさん:04/12/30 18:01:38
>>51
キサマそれでもC++使いか!

#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <vector>

int main(){
std::srand(static_cast<unsigned int>(std::time(0)));
std::vector<int> v;
std::copy(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(), std::back_inserter(v));
std::random_shuffle(v.begin(), v.end());
if (v.size() >= 6)
copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, "\n"));
else
std::cout << "指定した数が少ないです" << std::endl;
}
5352:04/12/30 18:04:02
コンパイル通したらいろいろミスがあったorz
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <vector>
#include <iterator>

int main(){
std::srand(static_cast<unsigned int>(std::time(0)));
std::vector<int> v;
std::copy(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(), std::back_inserter(v));
std::random_shuffle(v.begin(), v.end());
if(v.size() >= 6)
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, "\n"));
else
std::cout << "指定した数が少ないです" << std::endl;
}
54デフォルトの名無しさん:04/12/30 18:15:08
取り出すのは6個
std::copy(v.begin(), v.end() → v.begin(), v.begin() + 6
55デフォルトの名無しさん:04/12/30 18:15:55
>>38
jpegもpngも仕様策定団体が公式サイトでライブラリを公開している。
従って、常識的にはそれを使うべきかと。
#GifはCompuServeが権利を持っているけどいいんだっけ?
5642 ◆opL87fRjm. :04/12/30 19:14:30
>>55
大学の宿題です。
ライブラリは使えません。
皆さんの実力を発揮してください。よろしくお願いします。
57デフォルトの名無しさん:04/12/30 19:16:38
>>56
自分でやれ。
金払ってる親が泣くぞ。
何のために大学に行っている?
学ぶ気がないならさっさと辞めて社会に出た方がよい。
58デフォルトの名無しさん:04/12/30 19:19:50
>>56
ばれたら落ちる。やめなって。ここでできるのは情報収集だけだよ。
5942 ◆opL87fRjm. :04/12/30 19:23:51
>>58
そうですか・・・
ではせめてヒントをお願いします。
元ネタになるソースがあればもっとうれしいです。
60デフォルトの名無しさん:04/12/30 19:25:07
ここで解答しても、解答者に著作権があるわけではないから、質問者が自分でやった
と言っても全然問題ないんじゃないの?
61デフォルトの名無しさん:04/12/30 19:25:40
libpngとか良く無いかい?
62デフォルトの名無しさん:04/12/30 19:36:35
以下抜かり無いか?

ファイル入出力の基礎。
jpeg,gif,pngの関連ソースと仕様の入手。
コーディングの基礎。

winで動くlib*などのソースは、cygwinのミラーから取れ。susie,imagemagickなどのソースはgoogleで探せ。
63デフォルトの名無しさん:04/12/30 19:41:24
>>60
何を訳のわからんことを。
64デフォルトの名無しさん:04/12/30 19:45:18
いいか。今から支障が出ない程度に睡眠時間を削れ。掲示板にレスする暇もコンパイルする暇もないぞ。ビットマップの知識はあるな?

まずファイルのデータ構造を知り、ファイル全体を一気に読み込んでみろ。
65デフォルトの名無しさん:04/12/30 19:47:22
int main(int argc,char *argv[])
{
char data[1024 * 1024 * 1024];

FILE *fp = fopen("data.jpg","r");

fread(fp,1,1024 * 1024 * 1024,data);

fclose(fp);

return 0;
}

次は何やればいい?おっさん。
6642 ◆opL87fRjm. :04/12/30 19:50:13
>>64
ビットマップの知識はあります。

>まずファイルのデータ構造を知り、ファイル全体を一気に読み込んでみろ。
申し訳ありません。おっしゃっている意味が今ひとつわかりません。
67デフォルトの名無しさん:04/12/30 19:51:40
次にどんな汚い方法でもいい、読んだもんに基づいて、構造体データとビットマップを作れ。
68デフォルトの名無しさん:04/12/30 19:52:46
あと6日でjpeg,gif,pngの独自実装か。死ねるな。
6942 ◆opL87fRjm. :04/12/30 19:54:06
>>67
もしかして私から変われていますか?
7042 ◆opL87fRjm. :04/12/30 19:54:53
>>69
誤爆です。

>>67
もしかして私からかわれていますか?
71デフォルトの名無しさん:04/12/30 19:56:13
返事は短く!

ファイル種ごとに分析用の関数を分けろ。画像の仕様をみれば構造が分かる
72デフォルトの名無しさん:04/12/30 20:00:21
ややこしいことがあったら、手短にメモれ
73デフォルトの名無しさん:04/12/30 20:02:09
質問スレで質問したらなんかアホがいました。・・・と。
74デフォルトの名無しさん:04/12/30 20:04:31
皆ども、状況報告せよ!
75デフォルトの名無しさん:04/12/30 20:05:51
読み込みコード完成!
76デフォルトの名無しさん:04/12/30 20:07:03
よろしい。では書き込みコードをかけ
77デフォルトの名無しさん:04/12/30 20:10:21
構造体って何ですか
78デフォルトの名無しさん:04/12/30 20:11:34
だまれ!偽物め!
7942 ◆opL87fRjm. :04/12/30 20:11:41
すみません。もう一度聞きたいことを整理します。

JPEGからPNG、PNGからGIP、GIFからBMP
上記変換プログラムを別々に作成しなければいけません。

ただ直接変換が難しければJPEG→BMP→PNGといった感じでもかまいません。

C,C++は一通りできます。ビットマップの構造も知っています。

アドバイスよろしくお願いします。
80デフォルトの名無しさん:04/12/30 20:14:19
こら、まだjpeg,gif仕様を入手してないのか!急げ!
81デフォルトの名無しさん:04/12/30 20:20:51
状況報告せよ!
8242 ◆opL87fRjm. :04/12/30 20:21:30
>>80
すみません。どこで入手できるんでしょうか?
ぐぐっているんですけどそれっぽいのがでてこなくて・・・
83デフォルトの名無しさん:04/12/30 20:23:13
84デフォルトの名無しさん:04/12/30 20:23:59
司令官は怠け者に与える時間はないぞ!報告せよ!
85デフォルトの名無しさん:04/12/30 20:25:46
>>84
じゃあさっさとバイト行け。
8642 ◆opL87fRjm. :04/12/30 20:29:26
>>83
ありがとうございます。

英語なのでどこまでできるかわかりませんが読んでみます。

日本語があったらうれしいけど贅沢はいえませんよね・・・
87デフォルトの名無しさん:04/12/30 20:32:10
各ファイル種の構造がわかったら、報告せよ!
88デフォルトの名無しさん:04/12/30 20:36:20
今、場合分けしてバイト列を書いているところです。
89デフォルトの名無しさん:04/12/30 20:39:03
こらー、私語を慎んで専念しろ!
90デフォルトの名無しさん:04/12/30 20:44:58
場合分けでは、{}で内包的表記をするとよい。
91デフォルトの名無しさん:04/12/30 20:50:58
何だこの新入りは?
自動翻訳も電子辞書も使えないのか
92デフォルトの名無しさん:04/12/30 20:53:31
JPEG解読しました!
93デフォルトの名無しさん:04/12/30 20:57:23
よろしい。では、関数の独立性に注意して、先のファイル全体読み込みコードとJPEG分析コードを組み合わせてみよ!急げ!
94デフォルトの名無しさん:04/12/30 21:03:47
時間掛りそうなトラブルがあれば必ず報告せよ!
95デフォルトの名無しさん:04/12/30 21:09:48
jpegっていうとウェーブレット変換とかもやるの?
興味あるんだけど
96デフォルトの名無しさん:04/12/30 21:13:24
JPEGファイルの構造も分かり、
何とか全部自分でできるような気がしてきたので、もう大丈夫です。迷惑をお掛けして済みませんでした。これまでどうもありがとうございました。
97デフォルトの名無しさん:04/12/30 21:52:25
もうなにがなんだか
9842 ◆opL87fRjm. :04/12/30 22:11:05
GIFのフォーマットは大体わかりました。
ただ、LZWの圧縮方法がよくわかりません。
申し訳ありませんがソースか詳しく解説しているホームページがあれば教えていただけないでしょうか?
99デフォルトの名無しさん:04/12/30 22:16:07
ソースを教えたらダメだよ〉皆さん
100デフォルトの名無しさん:04/12/30 22:17:11
LZW法は特許で守られています。
101デフォルトの名無しさん:04/12/30 22:17:18
アドレス教えたらダメね<皆様
102デフォルトの名無しさん:04/12/30 22:18:09
あー、あれだ。せっかくだから特許に抵触しない展開法とやら使え。
103デフォルトの名無しさん:04/12/30 22:20:58
>>100
いつの話をしているんだよ。
104デフォルトの名無しさん:04/12/30 22:28:25
ワトソン君、もうつまづいたのかい? LZW法が違法なのにGIF読み込みのフリーウェアがあるのはどうしてだろうなー。世界のどこかに答えがあるだろうか。
10542 ◆opL87fRjm. :04/12/30 22:29:05
>>102
詳しくご教授願えないでしょうか?
106デフォルトの名無しさん:04/12/30 22:31:11
>>105
特許なんてとっくの昔に切れたから心配せずに使え。
107デフォルトの名無しさん:04/12/30 22:32:08
特許切れてるから抵触する展開法なんか無いような・・・
10842 ◆opL87fRjm. :04/12/30 22:34:44
>>106
使う前に方法がわかりません。
ヒントとしてホームページだけでも教えていただけないでしょうか?
109デフォルトの名無しさん:04/12/30 22:40:04
やれやれ、webのキーワード検索も知らないと見える。
110デフォルトの名無しさん:04/12/30 22:42:38
情報Aの教科書(高校)に検索の仕方が書いてある。
良くも悪くもそんな時代です。
111デフォルトの名無しさん:04/12/30 22:46:03
googleのヘルプを見て勉強しな
112デフォルトの名無しさん:04/12/30 23:04:00
ー終了ー
113デフォルトの名無しさん:04/12/30 23:28:00
#include <stdio.h>
main()
{
int i,j;
for(i=2;i<101;i++)
{
for(j=2;j<101;j++)
{
if(i%j==1)
{
if(i==j)
{
printf("%d\n",i);
}
}
}
}
}
2から100までの数字の素数を求めるプログラムを考えたのですが、
どう間違っているのか教えて頂けませんか?
自分の考え方は、素数は2以上の数ではその素数でしか割れないので、
余りが1のときにi=jになると考えたのですが、
実行結果はPress any key to continueとしか表示されません。よろしくお願いします。
114デフォルトの名無しさん:04/12/30 23:36:25
if(i%j==1)
{
if(i==j)
{

等しい数で割って1余るっておかしいだろ
115デフォルトの名無しさん:04/12/30 23:38:35
>>114
そうですね、すみません・・。
商と余りを逆に考えてました・・。
11651:04/12/31 01:07:04
>>52
できるだけ教育的プログラムを書いたわけだが。
117デフォルトの名無しさん:04/12/31 02:03:57
>>113

#include <stdio.h>

int main(int argc, char *argv[])
{
int i, j = 0, k, sosuu[50];
sosuu[j] = 2;

for(i = 3; i <= 100; i++){
for(k = 0; k <= j; k++)
if((i % sosuu[k]) == 0)
break;
if(k == j + 1)
sosuu[++j] = i;
}
for(k = 0; k <= j; k++)
printf("%2d\n", sosuu[k]);

return 0;
}

ガッツだ。
118デフォルトの名無しさん:04/12/31 02:04:48
>>116
ふーん
119デフォルトの名無しさん:04/12/31 02:43:56
>>33
もう見てないかもしれないが、それはACMにも対応しなければならないのか?
それとも無圧縮WAVだけに対応すればいいのか?それによってすることが若干
変わって来るんだが。
120デフォルトの名無しさん:04/12/31 02:46:56
>>119
どの形式でも読めるようにって注文だ
121デフォルトの名無しさん:04/12/31 02:49:10
('A`)マンドクセ
122デフォルトの名無しさん:04/12/31 02:52:50
こいつをCに書き直して使え。
ttp://www.vector.co.jp/soft/win95/prog/se214677.html
123デフォルトの名無しさん:04/12/31 03:01:14
汚ねぇソースだな
124デフォルトの名無しさん:04/12/31 06:02:27
>>113
眠れないから、java勉強しつつ作ってみた。
#include<stdio.h>

int main(void){
int i,j,k;
k=0;

for(i=2;i<=100;i++){
for(j=2;j<=100;j++){
if((i!=j) && (i%j == 0))
break;
if((i==j) && (i%j == 0)){
k++;
printf("素数%d個目=%d\n",k,i);
break;
}
}
}
return 0;
}
気合だ!
125デフォルトの名無しさん:04/12/31 10:37:14
age
12642 ◆opL87fRjm. :04/12/31 12:26:54
GIP→BMPは大体できました。
簡単な動作確認はとれたので時間が余ったらちゃんとしたテストをすることにします。

JPEGの方で相談なんですが、処理方式に
・基本DCT変換
・拡張DCT変換
・可逆方式
・ハイアラーキカル方式
の4つがあるようなのですが、ハイアラーキカル方式に関する情報が手に入りません。
ここで回答してくださっている方はとても優秀な方だと思いますので、
ハイアラーキカル方式の変換ロジックを作製していただけないでしょうか?
よろしくお願いします。
127デフォルトの名無しさん:04/12/31 12:42:16
他人に丸投げしてもやってもらえるわけないだろうに。
とりあえず、自分で書けるとこまで書いたモノを出してみたら?
努力の跡が認められればヒントくらいはもらえると思うよ
128デフォルトの名無しさん:04/12/31 12:47:00
129デフォルトの名無しさん:04/12/31 13:29:52
>>42
ここは宿題投下スレだ。

[C言語なら俺に聞け]

http://pc5.2ch.net/test/read.cgi/tech/1104114259/l50

こっちにいけ
13042 ◆opL87fRjm. :04/12/31 13:36:04
>>129
?
宿題投下しましたが跳ね返されたんですが?
C言語は対応できない、と言っていますか?
131デフォルトの名無しさん:04/12/31 13:41:58
130
ホットケーキ
132デフォルトの名無しさん:04/12/31 14:09:48
変換ルーチン3×2=6個必要。このペースじゃ間に合わないよ。コンパイルする暇ないぞ!急げ!
133113:04/12/31 14:45:32
>>117,124
ありがとうございます。
自分は素数未満の2以上の数で素数は割り切れないのでこんな感じでやりました。
#include <stdio.h>
main()
{
int i,j;
for(i=2;i<101;i++)
{
for(j=2;j<101;j++)
{
if((i>j)&&(i%j==0))break;
if(i==j) printf("%4d",i);
}
}
}
134デフォルトの名無しさん:04/12/31 16:09:00
>>130が気持ち悪いよー
「ですが?」
この語尾気持ち悪いよー
135デフォルトの名無しさん:04/12/31 16:16:10
>>133
求める素数の個数が増えてくると>>117の方が爆発的に速いと思う。
136デフォルトの名無しさん:04/12/31 22:12:46
すいません、冬休みの課題がわからないので
お願いします。

英文のテキストファイルを入力し、アルファベットの出現度数
と割合を表示するプログラムを以下の仕様に基づいて作れ。

入力:
英文テキストのファイル名(main関数で入力)

処理1(input関数):
ファイルを開き、その内容を一文字ずつ読み込み
アルファベット文字ごとに数える(大文字、小文字は区別しない)
・引数…ファイル名(char*)、アルファベット勘定用配列(int*)
・戻り値…なし(void)
137136:04/12/31 22:13:52
処理2(sort関数):
ファイルの出現度数をキーに降順(大きい順)に並べ替える
(どのアルファベットかも分かるように)
・引数…アルファベット文字用配列(char*)、
    アルファベット勘定用配列(int*)
・戻り値…なし(void)

出力(output関数):
アルファベットの文字、その出現度数と割合、割合に応じて
「*」を表示したグラフを新しいファイルと画面に表示する。
・引数…アルファベット文字用配列(char*)、
    アルファベット勘定用配列(int*)
・戻り値…なし(void)
138136(ここからヒント):04/12/31 22:14:48
アルファベット文字用配列:
char a[26];
a[0]〜a[25]に'A'コード(65)〜'Z'コード(90)までを入力しておく。
あとで、ソートと出力の際に利用する。

アルファベット勘定用配列:
int b[26];
'A'の出現度数をb[0]へ、以下1ずつずらして'Z'の出現度数
はb[25]へ勘定するようにする。
139136:04/12/31 22:15:56
input関数:
ファイルを開いてファイルの内容を1文字ずつ読み込む。
int c;
FILE *fp;
if(NULL==(fp=fopen(fi,"r"))){
fprintf(stderr,"error:file open[%s].\n,fi);
exit;
}
while(EOF!=(c=getc(fp))){

(アルファベットの勘定)
  (アルファベットだったら大文字にして勘定する)

}
大晦日に、人の宿題をするのも(・∀・)イイ!!
141136:04/12/31 22:16:38
sort関数:
sortでアルファベット文字用配列a[]とアルファベット勘定
用配列b[]の両方の要素を同時に入れ替える。
(入れ替えたときにアルファベット文字がどこに対応するか
分からなくならないようにする)

例(降順)
int b[5]={3,1,4,5,2},tmp;
for(i=0;i<4;j++){
for(j=i+1;j<5;j++){
if(b[i]<b[j]){
tmp=b[i];
b[i]=b[j];
b[j]=tmp;
}
}
}
142デフォルトの名無しさん:05/01/01 01:42:33
>>136
初仕事。出来るだけ君の要望に沿ってみた。
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>

void input(char *fi, int *b){
    int c;
    FILE *fp;
    if (NULL == (fp = fopen(fi, "r"))){
        fprintf(stderr, "error:file open\[%s\].\n", fi);
        exit(1);
    }
    while (EOF != (c = getc(fp))) if (isalpha(c)) b[toupper(c) - 'A']++;
    fclose(fp);
}

void sort(char *a, int *b){
    int i, j, tmpi;
    char tmpc;
    for (i = 0; i < 25; i++)
        for (j = i + 1; j < 26; j++)
            if (b[i] < b[j]){
                tmpi = b[i];
                b[i] = b[j];
                b[j] = tmpi;
                tmpc = a[i];
                a[i] = a[j];
                a[j] = tmpc;
            }
}
143142(続き):05/01/01 01:43:15
void output(char *a, int *b){
    int i, j, sum = 0;
    printf("character:frequency:percentage\n");
    for (i = 0; i < 26; i++) sum += b[i];
    for (i = 0; i < 26; i++){
        printf("%c:%3d:%3d:", a[i], b[i], (int)((double)b[i] / sum * 100));
        for (j = 0; j < (int)((double)b[i] / sum * 50); j++) printf("*");
        printf("\n");
    }
}

int main(void){
    char fi[256], a[26];
    int b[26], i;
    printf("input file name:");
    scanf("%[^\n]s", fi);
    for (i = 0; i < 26; i++) b[i] = 0;
    input(fi, b);
    for (i = 0; i < 26; i++) a[i] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i];
    sort(a, b);
    output(a, b);
    return 0;
}
正月に人の宿題をするのも(・∀・)イイ!!
145デフォルトの名無しさん:05/01/01 03:27:26
正月に宿題を出す方も解く方もどうかと思うが
146136:05/01/01 08:00:31
>>142
ありがとうございます!
本当に助かります・・・。極限感謝!
>>145
そんなこと言わないで・・・。
147デフォルトの名無しさん:05/01/01 08:02:54
おれも解きてえ。
仕事が詰まりすぎてるからぜひ現実逃避させてくれ。
148デフォルトの名無しさん:05/01/01 09:10:46
1.任意のテキストファイルから英単語を抽出せよ。
2.文字列ポインタで与えられた単語群から最長のしりとり列を作れ。
3.対話的にしりとりをせよ。
149デフォルトの名無しさん:05/01/01 09:22:08
早く解けよ
150デフォルトの名無しさん:05/01/01 10:05:13
>>148 1.
#include <cctype>
#include <iostream>
#include <iterator>
#include <fstream>
#include <set>
#include <string>
int main()
{
    std::string filename;
    std::cout << "input file name:"; std::cin >> filename;
    std::string str(std::istreambuf_iterator<char>(std::ifstream(filename.c_str()).rdbuf()), std::istreambuf_iterator<char>());
    std::set<std::string> words;
    const char delimiters[] = " ,.\t\n:';!?\"";
    std::string::size_type start_index = str.find_first_not_of(delimiters);
    while (start_index != std::string::npos)
    {
        std::string::size_type end_index = str.find_first_of(delimiters, start_index);
        if (end_index == std::string::npos) end_index = str.length();
        if (end_index - start_index != 0)
        {
            std::string word(str.substr(start_index, end_index - start_index));
            if (words.find(word) == words.end()) words.insert(word);
        }
        start_index = str.find_first_not_of(delimiters, end_index);
    }
    for (std::set<std::string>::iterator first = words.begin(), last = words.end(); first != last; ++first)
        std::cout << *first << ' ';
    return 0;
}
151デフォルトの名無しさん:05/01/01 13:00:52
しりとり。
152 【大凶】 【844円】 :05/01/01 19:59:07
キタ━━━━━━━━━━━(゚∀゚)━━━━━━━━━━━!!!
153 【570円】 !mikuji:05/01/01 20:28:25
test
154 【大吉】 【1678円】 :05/01/01 20:32:03
155デフォルトの名無しさん:05/01/01 20:38:15
おみくじどうやってやるんですか
156デフォルトの名無しさん:05/01/01 20:49:24
>>155
名前欄に記入
御神籤:!omikuji
お年玉:!DAMA
157!DAMA:05/01/01 20:49:45
tes
158デフォルトの名無しさん:05/01/01 20:50:16
>>156
間違えた小文字で!damaね
159 【吉】 【503円】 :05/01/01 20:54:43
てs
160デフォルトの名無しさん:05/01/01 20:55:50
>>156
どうも。
161 【吉】 【1638円】 :05/01/01 22:13:26
oppai
162 【小吉】 【1255円】 :05/01/01 23:07:03
test
163デフォルトの名無しさん:05/01/01 23:12:53
これからはテスト禁止にしますね。
164 【大凶】 【402円】 :05/01/01 23:30:31
もっとも宿題こないとこのスレやることないし
165デフォルトの名無しさん:05/01/02 02:12:08
>>148 2.
トリビアの種とttp://al.cs.tuat.ac.jp/~yshinano/shiritori/を参照

>>148 3.
>>148 2.を参照。
166デフォルトの名無しさん:05/01/02 13:35:38
C言語です。お願いします。
10人のアルファベット表記の名前を
    (1)マージソート
    (2)クイックソート
で辞書順に出力するプログラムを各々作成せよ。
10人の名前は2次元配列で作成しmain関数以外の
関数も作成して実行せよ。
ってのが宿題なんですが、できればstrcpyを使わず
strcmpで作っていただきたいですm(_ _)m
お願いしますm(_ _)m
167デフォルトの名無しさん:05/01/02 13:52:24
>>166
マージソートがどういう性質のものかわかってんのか?
168デフォルトの名無しさん:05/01/02 14:00:15
配列の型はポインタの型に変換できる。Cでは通常、文字列を0=='\0'で終る文字の配列のように扱う。つまり、文字の二次配列は、文字列ポインタのポインタに変換できる。
char names[10][MAX_NAMELEN]={略};
char*pch; int i=0;
pch=names[i]; //これはOK
169デフォルトの名無しさん:05/01/02 14:03:57
>>167
一応わかってるんですが〜自分でやったのがstrcpyを
使ってしまうんです・・・。
一応貼り付けます。
#include <stdio.h>
#include <string.h>
void merge(char [][10],int,int,int,int);
void merge_sort(char [][10],int,int);
int main()
{
int i;
char name[][10] = {
"suzuki","kimura","sato","watanabe","takeuti",
"ito","kobayasi","moroisi","hukuda","maejima",
"iwasaki","yanagida","saito","toyodome","umino",
"endo","hasimoto","morita","yosida","watahiki",
"onai","isibasi","aizawa","isitobi","sugaya",
"huruta","onnoda","noguti","usuba","doguti",
"mori","tokunaga","tani","watahiki","simizu",
"jono","hukasawa","hosoyati","yamauti","minowa",
"sakuragi","rukawa","anzai","yazawa","soeta",
"baba","sakai","kobayasi","tuemura","amarume",
};
170デフォルトの名無しさん:05/01/02 14:04:47
puts("--- ソート前 ---");
for( i = 0; i <=49; i++){
printf("%s\n",name[i]);
}
merge_sort(name, 0, 49);
puts("--- ソート後 ---");
for( i = 0; i <= 49; i++){
printf("%s\n",name[i]);
}
return 0;
}
171デフォルトの名無しさん:05/01/02 14:05:21
void merge(char name[][10],int begin1,int end1,int begin2,int end2)
{
int left = begin1, right = begin2;
int k = 0, i;
char tmp[50][10] = {0};

/* 左側か、右側か、どちらか短い方の終端まで比較処理を行なう */
while( (left <= end1) && (right <= end2) ){
if(strcmp(name[left], name[right]) < 1){
strcpy(tmp[k++], name[left++]);
}else{
strcpy(tmp[k++], name[right++]);
}
}

/* 左側が残っていれば、すべてコピー */
while( left <= end1 ){
strcpy(tmp[k++], name[left++]);
}

/* 右側が残っていれば、すべてコピー */
while( right <= end2 ){
strcpy(tmp[k++], name[right++]);
}

/* 整列済みデータの書き戻し */
for(i = 0; i < k; ++i){
strcpy(name[begin1+i], tmp[i]);
}
}
172デフォルトの名無しさん:05/01/02 14:05:42

void merge_sort(char name[][10],int begin,int end)
{
int mid;
char tmp[10] = {0};

if(end == begin)
return;

if(end == begin+1){
if(strcmp(name[begin], name[end]) > 0){
/* 値交換 */
strcpy(tmp, name[begin]);
strcpy(name[begin], name[end]);
strcpy(name[end], tmp);
}
return;
}
mid = (begin + end) / 2;
merge_sort(name, begin, mid); /* 左側の部分ソート */
merge_sort(name, mid+1, end); /* 右側の部分ソート */
merge(name, begin, mid, mid+1, end); /* 併合処理 */
}
173デフォルトの名無しさん:05/01/02 14:05:58
[10][]だよ。高次が左
174デフォルトの名無しさん:05/01/02 14:06:53
>>167
こんな感じです。ちなみに50人でやった場合です。
175デフォルトの名無しさん:05/01/02 14:19:55
関数の仮引数に配列使うな。ポインタに直せ
176デフォルトの名無しさん:05/01/02 14:27:22
はい。直しておきます。
それとどうすればstrcpyを使わない
プログラムにできるんですか?
177デフォルトの名無しさん:05/01/02 14:37:57
実体をコピーせずにindexやpointerで参照する配列を作ると早い
178デフォルトの名無しさん:05/01/02 15:49:49
この手の宿題見るといつも思うんだけどさぁ、
文字列処理なんてC言語でするなよ。
せめてC++でstd::string型使って。

俺の経験上、Cで出された課題もC++で書いて出して、
おまけで「いまどきCで文字列処理なんてやってんじゃねぇよ」
(実際提出する際には口調は穏やかに)って書いとけば優もらえるよ。
179デフォルトの名無しさん:05/01/02 16:03:15
>>178
それが〜C言語でやらなきゃいけないんですよ〜。
できればクイックソートの問題解いてもらえませんか?
180デフォルトの名無しさん:05/01/02 16:10:37
>>179
いや、だから、先生に「C言語で」といわれてるにもかかわらず、
C++で出した上に文句書いて優もらえた経験がある。

俺の環境が恵まれてるのか?
181デフォルトの名無しさん:05/01/02 16:14:40
>>180
教授の人格にもよります。
オレの習ってる教授ではダメなんですよ〜。
182デフォルトの名無しさん:05/01/02 16:18:13
褒める先生も居れば怒る先生も居るだろう。
指定通りに書けば怒られることはない。
183デフォルトの名無しさん:05/01/02 16:22:09
そういうわけで誰かクイックソートの問題を
解いていただきたいのですが〜・・・。
184デフォルトの名無しさん:05/01/02 16:44:41
実力あるんだから、自分でやるんだ。実体をコピー&ソートしないで、別の配列に(弱い)参照を用意してそれをソートすろよ
185デフォルトの名無しさん:05/01/02 16:54:03
しまいにはstring algorithms library使って
「標準ライブラリなんか使ってんじゃねぇよ」ってか?
ただのDQNだな
186デフォルトの名無しさん:05/01/02 16:58:37
qsortという便利な関数を使うとなお良い(使えれば)。
187デフォルトの名無しさん:05/01/02 17:03:40
ついでに、const,registry,restrictedキーワードも使いこなしてくれれば…
188デフォルトの名無しさん:05/01/02 17:07:51
つか、ソートの勉強するのにqsort使ったら本末転倒やん。
189デフォルトの名無しさん:05/01/02 17:08:43
アセンブリとクロスレファレンスも吐き出してくれないか
190デフォルトの名無しさん:05/01/02 17:14:57
ついでにx86アセンブリ勉強して、ソートをpentium用に最適化してくれないか。
191デフォルトの名無しさん:05/01/02 17:17:37
なんで逃げられたんだろ…
192デフォルトの名無しさん:05/01/02 17:34:48
非標準の関数を1ミリ秒早くするのにものすごい苦労があるのさ
193デフォルトの名無しさん:05/01/02 17:43:31
「標準入力から C 言語などのプログラムテキストファイルを読み込み、
使用している関数名を頻度順に並べなさい。
これは宣言文と実際の式のどちらも含みます。
なお、同じ頻度の関数は辞書順に並べなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに
入力した出力を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。
但し、関数名の長さは高々 255 文字と仮定して良い。」
という課題が出てるのですができないので教えてください。
10日までによろしくい願いします。
194デフォルトの名無しさん:05/01/02 17:57:21
「標準入力から C 言語などのプログラムテキストファイルを読み込み、
              ~~~~~~
195デフォルトの名無しさん:05/01/02 18:56:11
「標準入力から C 言語のプログラムテキストファイルを読み込み、
使用している関数名を頻度順に並べなさい。
これは宣言文と実際の式のどちらも含みます。
なお、同じ頻度の関数は辞書順に並べなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに
入力した出力を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。
但し、関数名の長さは高々 255 文字と仮定して良い。」
という課題が出てるのですができないので教えてください。
10日までによろしくい願いします。
196デフォルトの名無しさん:05/01/02 19:28:28
答える必要ないな。自分でやれ。
197デフォルトの名無しさん:05/01/02 20:07:38
パーサ合成技術
198デフォルトの名無しさん:05/01/02 21:05:04
>>195
い願いされてもな。パースがむばれ
199デフォルトの名無しさん:05/01/02 21:22:53
>>195
とりあえずcdecl拾ってくりゃ8割方完成
200デフォルトの名無しさん:05/01/02 21:32:12
>>195
提出日当日に

「先生!
#define M(a, b) a##b
とか
#define M(a) #a
の扱いが判らなかったので、出来ませんですた」

と言えば、多分許してくれると思う。
201デフォルトの名無しさん:05/01/03 13:17:44
>>195
括弧の直前にある名前は関数名として考えていいと思う。
それが{}に囲まれている範囲内なら関数呼び出しで、
トップレベルなら宣言ということにしていいんじゃないかな。

実際には関数の中で関数の宣言をすることは可能なんだけど、
やってることはめったに無いってことで。
202デフォルトの名無しさん:05/01/03 13:20:47
gcc2.Xから.yファイル拾ってきて関数のとこだけ書き出すようにすりゃ完成。
203デフォルトの名無しさん:05/01/03 14:18:48
>>195とは別人なんですけど、>>201読んで
#include<stdio.h>
main()
{
int func( char *str)
{ printf(str); }
func("func()");
}
とやったら通ったんですが(gcc)、こういうのは認められてるやり方なんですか?
204デフォルトの名無しさん:05/01/03 14:20:10
一文字入力させるときどういうふうに書いてますか?
205デフォルトの名無しさん:05/01/03 14:25:46
>>203
gcc拡張。VCとかだと通んない。
206201:05/01/03 14:39:12
>>203,205
関数定義の中で関数定義をするのは規格で認められていないかもしれないが、
(プロトタイプ)宣言だけなら可能なはず。
207デフォルトの名無しさん:05/01/03 14:44:29
Dなら認められているよね。関数のネスト。
208201:05/01/03 14:50:01
>>207
パスカルでもね。
209デフォルトの名無しさん:05/01/03 15:45:33
冬休みの課題で出た問題がひとつだけわかりません……
ヒントだけでも結構ですので、どうかよろしくお願いします

[2] 入力されたデータがランダムかどうか判別するプログラムを作成せよ
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン): gcc(3.3.5?)
 [3.3] 言語:C
[4] 期限:2005年01月07日23:59まで
210デフォルトの名無しさん:05/01/03 15:46:54
不可能

つかネタだろ
211デフォルトの名無しさん:05/01/03 15:47:41
>>210
無学だな。
212デフォルトの名無しさん:05/01/03 15:48:34
>>209
ランダムを定義しないと
213デフォルトの名無しさん:05/01/03 15:50:28
>>209
入力されるデータはどういう型なの?
214デフォルトの名無しさん:05/01/03 15:51:04
・何をもって、ランダムとするか
・入力データってのは何であるか(数限定とか)
その辺がわかりません。ヒント下さい。
215デフォルトの名無しさん:05/01/03 15:58:42
まぁ、ランダム判定の方法はいくらでもあるわけだが…
http://www.kinyuu.co.jp/report/rep000306.htm
216デフォルトの名無しさん:05/01/03 15:59:33
// データの規則性の高さを返す。
// 全く乱雑な時、intの最大値を返す。
int kisokusei(void*data,size_t size);
217デフォルトの名無しさん:05/01/03 16:02:07
で、結局ネタだったの?
218209:05/01/03 16:05:26
任意のチューリングマシンが有限回のステップの後に停止するかどうかを判別するプログラムも課題で出ています。
これを落とすと卒業できなくなってしまいます!助けてください!!!!
219デフォルトの名無しさん:05/01/03 16:06:48
度合いしか測定できねえべ。

「ランダムである」って言い切ってるしなあ
220デフォルトの名無しさん:05/01/03 16:07:58
>>218
ネタですね。
221デフォルトの名無しさん:05/01/03 16:08:21
>>218
落しとけ
222デフォルトの名無しさん:05/01/03 16:08:27
ネタですな
223デフォルトの名無しさん:05/01/03 16:10:15
TMの停止問題は有名
224デフォルトの名無しさん:05/01/03 16:12:03
>>211
たまには数学も勉強しろよ?
225デフォルトの名無しさん:05/01/03 16:12:52
>>224
ほげほげ!
226デフォルトの名無しさん:05/01/03 16:15:35
>>224
先生!入力されたデータがランダムであるかどうか判定できない事を数学的に証明
してください!
227デフォルトの名無しさん:05/01/03 16:17:28
>>226
たまには数学も勉強しろよ m9(^Д^)プギャー
ttp://members.at.infoseek.co.jp/nbz/ref/random.html
228デフォルトの名無しさん:05/01/03 16:21:07
>>227
すごい!さすが先生です!こんな証明をなさるなんて!
229デフォルトの名無しさん:05/01/03 16:27:24
>>227は本当にゲーデルの不完全性定理を完全に理解しているのだろうか…
230デフォルトの名無しさん:05/01/03 17:48:50
負け惜しみ
231デフォルトの名無しさん:05/01/03 17:55:56
冬休み早く終わらないかな。
232デフォルトの名無しさん:05/01/03 18:06:23
年中夏休み冬休み
233デフォルトの名無しさん:05/01/04 00:42:48
>>201
ANSI-C以前のソースを見ると山ほど出てくるぞ。
/* こんなのとか */
int func(foo)
char *foo;
{
char buf[BUFSIZ];
FILE *fopen();
FILE *fp = fopen(foo, "r");
int bar = fgets(buf, sizeof(buf), fp);
fclose(fp);
return bar;
}
234デフォルトの名無しさん:05/01/04 04:01:24
C言語でお聞きしたいのですが、
ファイルの中に縦1列に並んだ2、3桁の数字を配列
に格納して表示しようとしてるんですが・・・
どのようにすればa[m]として
for(m=0;m==\0;m++)printf("%d%d",m,atoi(a))を実行
した時にm=0,1,2,...となってくれるのでしょうか?

235デフォルトの名無しさん:05/01/04 04:04:06
あ、間違いです。
for(m=0;a[m]==\0;m++)printf("%d%d\n",m,atoi(a));
でした。
お願いします。
236デフォルトの名無しさん:05/01/04 04:06:26
ちゃんと喋れ
237デフォルトの名無しさん:05/01/04 04:06:55
言ってる意味がよくわからん
238デフォルトの名無しさん:05/01/04 04:20:57
>>234-235
無理です。諦めましょう。
239デフォルトの名無しさん:05/01/04 09:04:46
forの終了条件を日本語で説明しろ。

目的と対象をちゃんと記述しろ。例えば、ここに赤と青のボールがあった時に「ボール持って来て」と君が命令しても、すぐに対処できないし、聞き返すのも時間の無駄。
240デフォルトの名無しさん:05/01/04 09:40:04
自己解決しました。ありがとうございました。
241エスパー:05/01/04 09:40:37
C言語でお聞きしたいのですが、
ファイルの中に縦1列に並んだ2、3桁の数字を配列
に格納して表示しようとしてるんですが・・・
こんな感じで並んでいます
458
236
11
25
69
42
140
どのようにすればa[m]として
"458"を458に変換できて
for(m=0;m==\0;m++)printf("%d%d",m,atoi(a[m]))
を実行した時に
a[0], a[1], a[2], a[3]...
の中身を表示してくれるのでしょうか?
242デフォルトの名無しさん:05/01/04 09:48:39
>>241
それでも言ってる意味がさっぱりわからん
243デフォルトの名無しさん:05/01/04 09:50:03
>241に問題です。
atoi(a[m])の値は何を表すか?
上記のforループでの終了条件は、文法も論理も完全に間違っていますが、正しい終了条件を日本語で記述しなさい。
244デフォルトの名無しさん:05/01/04 10:02:42
日本語がダメならスワヒリ語で機械にもよく分かるように終了条件を説明しろ。
245デフォルトの名無しさん:05/01/04 10:08:04
ファイルから何行読み込んだか分かるか?
246デフォルトの名無しさん:05/01/04 10:11:18
また逃げられたか…
247デフォルトの名無しさん:05/01/04 11:01:49
自己解決しました。ありがとうございました。
248デフォルトの名無しさん:05/01/04 12:31:53
>>243
atoi(a[m])1行ずつの数字をあらわすようにしたいです。
>>245
わかりません・・・。
249デフォルトの名無しさん:05/01/04 12:47:45
>> どのようにすればa[m]として
>> "458"を458に変換できて
itoa

一行ずつなら\nごとにパースすればいいと思うが
250デフォルトの名無しさん:05/01/04 12:48:16
何行来るか分からないのに全部配列に格納できないよ。型って知ってる?
int i; char s[行の最長の長さ];
fgetsで文字列をsに読み込む。
失敗したらやめる。
atoiでsを整数として解釈した結果をiに代入。繰り返し。
251デフォルトの名無しさん:05/01/04 12:49:46
日本語おかしかった、スマソ

あとvector<int> aにつっこんでけばできるでそ
252デフォルトの名無しさん:05/01/04 12:57:18
それなら
ファイルa.txtとb.txtには1行に1つ整数値が書かれている。
しかも小さい順にソートされている。a.txtとb.txtの整数値を
あわせてソートさせて表示するプログラムを書け。
というレポートがあるんですがこれは配列は使わない
ってことなんですか?
253デフォルトの名無しさん:05/01/04 13:04:13
>252
#include<stdlib.h>
malloc, realloc, free
で格納場所を陣取っておけ
254デフォルトの名無しさん:05/01/04 13:08:16
>253
すみません。どうやればいいかわかりません。
255デフォルトの名無しさん:05/01/04 13:08:52
int*pi=NULL;
...
pi=(int*)realloc(sizeof(int)*n);
...
free(pi);
256デフォルトの名無しさん:05/01/04 13:10:30
...realloc(pi, sizeof...
257デフォルトの名無しさん:05/01/04 13:10:44
> ファイルa.txtとb.txtには1行に1つ整数値が書かれている。
> しかも小さい順にソートされている。a.txtとb.txtの整数値を
> あわせてソートさせて表示するプログラムを書け。

これなら配列は要らない
258デフォルトの名無しさん:05/01/04 13:13:05
>255
よくわからないです。
つまり配列に格納はできないですよね?
259デフォルトの名無しさん:05/01/04 13:16:45
>257
配列いらないのですか?
ではどのように考えればいいのですか?
260デフォルトの名無しさん:05/01/04 13:21:25
>259
2ファイル同時に開いて小さい方の値を選んで出力していけ。
261デフォルトの名無しさん:05/01/04 13:25:05
>260
わかりました。がんばってみます。
できないときはもう一度ここでヒントをもらいますので
そのときはお願いします。ありがとうございました。
262デフォルトの名無しさん:05/01/04 13:27:53
>258
pi!=NULLならば、0<=i<nの範囲でpi[i]がint値として使える。
263デフォルトの名無しさん:05/01/04 13:52:45
GOTOを使うと逮捕なんですか。

岩手大生がGOTO、現行犯逮捕
 岩手県警盛岡東署は4日、盛岡市高松、岩手大人文社会科学部4年
 容疑者(22)をGOTOの現行犯で逮捕した。(読売新聞)
264デフォルトの名無しさん:05/01/04 14:00:45
逮捕だけじゃない、変なレッテルが付いてるとgoto hellに陥る
265デフォルトの名無しさん:05/01/04 14:53:56

[2] 問題文(含コード&リンク): 1〜100までの素数を表示するプログラムを作成するというプログラムで、
For文を使った場合とWhile文を使った場合でプログラムを作成という冬休み課題がでているのですが
For文はわかったのですがWhile文の場合だとどのようにすればいいか検討がつきません。
よろしくお願いいたしますm(_ _)m

[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ(バージョン): ボーランドフリーコンパイラ
 [3.3] 言語:C
266デフォルトの名無しさん:05/01/04 15:00:31
for(init();cond();cont()){
doit();
}

init();
while(cond()){
doit();
cont();
}
と同じ
267デフォルトの名無しさん:05/01/04 15:19:04
for文で書いたものを出せ
そうすりゃそれをwhile文に書き直してやる
268265:05/01/04 15:32:04
#include "stdafx.h"

int main(void)
{
int i,j,k,d;
k=0;
for (i=2;i<=100;i++){
d=0;
for (j=2;j<=i;j++){
if ((i%j==0)&&(i!=j)){

d=1;
}
}
if (d==0){
k++;
printf("素数%d個目=%d\n",k,i);
}

}

return 0;
}

FORだとこれです。
269デフォルトの名無しさん:05/01/04 15:40:40
270デフォルトの名無しさん:05/01/04 16:04:48
>>268
無駄な計算が多いな
動くことは動くが、もうちょと考えてみてはどうだ
271デフォルトの名無しさん:05/01/04 16:05:40
#include "stdafx.h"
int main(void)
{
int i,j,k,d;
k=0;
i=2;
while (i<=100){
d=0;
j=2;
while (j<=i){
if ((i%j==0)&&(i!=j)){
d=1;
}
j++;
}
if (d==0){
k++;
printf("素数%d個目=%d\n",k,i);
}
i++;
}
return 0;
}
272デフォルトの名無しさん:05/01/04 16:13:20
すみません。
ファイルa.txtとb.txtには1行に1つ整数値が書かれている。
しかも小さい順にソートされている。a.txtとb.txtの整数値を
あわせてソートさせて表示するプログラムを書け。
が、がんばったんですができませんでした。
おしえてください!!
273デフォルトの名無しさん:05/01/04 16:16:50
>272
どこまでできた?
274デフォルトの名無しさん:05/01/04 16:17:22
一つのファイルでソートできているプログラムがあるなら、
system("cat a.txt > c.txt");
system("cat b.txt >> c.txt");
を走らせて、c.txtをソーティング。
かなり外道なやり方だけどね。
275265:05/01/04 16:28:29
>>271

ありがとうございました!!
276デフォルトの名無しさん:05/01/04 16:29:08
とりあえずaのファイルの出力だけです・・・。
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp,*fp2;
char c[128],d[128];
int m,n,k;

fp=fopen("a.txt","r"),fp2=fopen("b,txt","r");
while(fgets(c,128,fp)!=NULL){
for(m=0;c[m]!='\n'; ){
for(k=0;c[m]!='\n';m++){
e[k]=c[m];
k++;
}
e[k]='\0';
printf("%d\n",atoi(e));
}
}
fclose(fp);
fclose(fp2);
return 0;
}
277デフォルトの名無しさん:05/01/04 16:37:11
>273
276です。まだまだ全然ダメです。
278デフォルトの名無しさん:05/01/04 16:39:39
break;と書くと、ループを抜けられるぞ。条件式が一度に書けないなら、一時的な変数にfgetsの結果を置け。ここでは改行チェックをしなくてもよい
279デフォルトの名無しさん:05/01/04 16:43:37
+std::vector<int> v;

-print("%d\n",atoi(e));
+v.push_back(atoi(e));

+std::sort(v.begin(), v.end());
280デフォルトの名無しさん:05/01/04 16:58:26
atoiは後ろの改行を無視するはずだ。改行を消さずとも
281デフォルトの名無しさん:05/01/04 18:18:44
かけ算九九表を出力するという宿題がでたのですが
一の段 二の段 三の段 四の段 五の段・・・
というかんじでループさせて出力させたいのですがどのようにかけばよいのでしょうか?
282デフォルトの名無しさん:05/01/04 18:24:13
for(i=1;i<10;i++){
for(j=1;j<10;j++){
sum=i*j;
printf("%3d",sum);
}
printf("\n");
}
283デフォルトの名無しさん:05/01/04 18:28:14
>281
二重のforループ中で掛け算してprintfで左上から右下まで吐き出せばいい。
284デフォルトの名無しさん:05/01/04 18:30:14
>282
ありがd
285デフォルトの名無しさん:05/01/04 18:42:21
タブキーのアスキーコード教えてください。
286デフォルトの名無しさん:05/01/04 18:44:26
'\t'
287デフォルトの名無しさん:05/01/04 18:46:08
>>286
数字で教えてください。よろしくお願いします。
288デフォルトの名無しさん:05/01/04 18:48:30
printf("%d",'\t');
289デフォルトの名無しさん:05/01/04 18:48:47
printf("%d\n", '\t');

自分で調べろや('A`)
0x09じゃないか?
290デフォルトの名無しさん:05/01/04 18:49:11
かぶったorz
291デフォルトの名無しさん:05/01/04 18:49:55
>>289
サンクスえりまっち
292デフォルトの名無しさん:05/01/04 18:49:56
printf("%d\n",'\t');
293デフォルトの名無しさん:05/01/04 18:56:20
なんか他のスレが開けないのでここで・・・
WinSDKなんですが、RichEditにキー入力されたのを取得するには
どうしたらいいんでしょうか?
294デフォルトの名無しさん:05/01/04 19:04:17
任意長の文字列を
"\n"→"\\n"
"\t"→"\\t"
のように変換して、別のバッファに格納する関数ってありますか?
295デフォルトの名無しさん:05/01/04 19:11:51
>>294
boost::algorithm::replace_all
296デフォルトの名無しさん:05/01/04 19:12:36
>>294
%s/\n/\\nでも使っとけ。
297デフォルトの名無しさん:05/01/04 20:33:55
void replace_es(char *dest, char *buf)
{
  while(*dest != '\0'){
    switch(*dest){
      case '\n':
        *buf++ = '\\';
        *buf++ = 'n';
        break;
      case '\t':
        *buf++ = '\\';
        *buf++ = 't';
        break;
      default:
        *buf++ = *dest;
        break;
    }
    dest++;
  }
  return;
}
298281:05/01/04 20:46:21
>>283
ヒントありがとうございます。

While文で作れと指示があって色々いじってみているのですがうまくいきません・・・

#include <stdio.h>
void main(void)
{
int i,k,j;
i=1;
while (i<=9)i++{
j=1;
while (j<=9)j++{
k=i*j;
printf("%d ",k);
}
printf("\n");
}
return 0;
}

と入力してコンパイルしたのですがERRORがでてコンパイルできません・・・・
どこが悪いのでしょうか?
299デフォルトの名無しさん:05/01/04 20:57:00
i=1;
while (i<=9)i++{ //ココと
j=1;
while (j<=9)j++{ //ココ
k=i*j;
printf("%d ",k);
}
300デフォルトの名無しさん:05/01/04 21:46:37
わらた
301デフォルトの名無しさん:05/01/04 22:03:13
>297 buf と dest 意味逆ぢゃね?
あと、文字列ぢゃなくね?
302デフォルトの名無しさん:05/01/04 22:54:13
1+2+3+4+・・・・の和が結果が、初めて1000を超える時の数と、
その和を出力するプログラムを作成せよ。という課題がでたのですが、
int goukei=0,i;

for(i=1;i

と、考えたのですがそれ以降どのようにかけばいいかわかりません・・・
どのように書けばよいのでしょうか?
303デフォルトの名無しさん:05/01/04 22:56:45
int main(int argc,char *argv[]){
int i;
int sum=0;
for(i=1;sum<1000;i++,sum+=i){
}

printf("%d\t%d\n",i,sum);
return(0);
}
304デフォルトの名無しさん:05/01/04 23:01:55
>>302
#include <stdio.h>
int main()
{
int goukei,i;
for(goukei=0,i=2;goukei<=1000;i++)
goukei=i*(i+1)/2;
printf("始めて(ry: %d\n和: %d\n",i,goukei);
return 0;
}
305304:05/01/04 23:03:07
累積するんだから毎回計算する必要ねーし。
306デフォルトの名無しさん:05/01/04 23:05:42
>>305
君は何を言っているんだ?
307デフォルトの名無しさん:05/01/04 23:05:46
馬鹿ばっかりだなここ
308303:05/01/04 23:07:56
あ、間違えた。

int main(int argc,char *argv[]){
int i;
int sum=1;
for(i=1;sum<1000;i++,sum+=i){
}

printf("%d\t%d\n",i,sum);
return(0);
}
309デフォルトの名無しさん:05/01/04 23:09:33
>>306
毎回いちいち総和を計算しなくてもいいってこと。
310デフォルトの名無しさん:05/01/04 23:11:18
>>309
そうか。
ってことは>>308より速いって事?試してみてよ。
311デフォルトの名無しさん:05/01/04 23:11:42
むしろ304は答えがまちがっとる
312デフォルトの名無しさん:05/01/04 23:12:57
間違ってるってか無限ループじゃねぇか?
313デフォルトの名無しさん:05/01/04 23:14:22
>>312
それはない
314デフォルトの名無しさん:05/01/04 23:19:55
int n = 1000;
int x = ((-1+sqrt(8*n+1.0)) / 2) + 1;
printf ("%d\t%d\n", x, x*(x+1)/2);
315デフォルトの名無しさん:05/01/04 23:23:30
普通にたしていったほうが早いと思う。
316デフォルトの名無しさん:05/01/04 23:27:57
int n = 1000;
int x = ((-1+sqrt((n<<3)+1.0)) / 2) + 1;
printf ("%d\t%d\n", x, (x*(x+1)>>1));
317デフォルトの名無しさん:05/01/04 23:29:09
304はコード自体も稚拙だな
318デフォルトの名無しさん:05/01/04 23:44:04
sum+=i の方がよっぽど早くてわかりやすい
足し算と掛け算割り算は等速じゃないぞ
319デフォルトの名無しさん:05/01/04 23:49:56
>>318
ところが速度だけで見れば>>316の方が早かったりするわけで
320302:05/01/04 23:50:15
>>303,304,305,306,308,309

ありがとうございました!!308でコンパイルできました。

321デフォルトの名無しさん:05/01/04 23:54:16
どこに性能の重きを置くかって問題だからねぇ。
ループで足していくのも、ループ使わないのも、どっちもそんな悪いコードじゃないと思うけど。
322デフォルトの名無しさん:05/01/04 23:55:30
この場合は明らかに可読性を取ってループを使うべきかと
323302:05/01/04 23:59:00
すいません、While文を使うとどのようになりますでしょうか?
>>323
空気の読めないレス(・∀・)イイ!!
325デフォルトの名無しさん:05/01/05 00:03:49
for文で書いたやつがあるんだから、
while文に書き直すくらい自分でやりなさいよ・・・
for (A;B;C){

}


=

A
while (B){

C
}
327302:05/01/05 00:06:58
すいませんでした・・・
今書き換え中です。。。
328デフォルトの名無しさん:05/01/05 00:07:45
>>326
A;
while (B){

C;
}
329デフォルトの名無しさん:05/01/05 00:08:57
for文とwhile文を相互変換できないなんて一切理解してないんですね
330デフォルトの名無しさん:05/01/05 00:10:54
ifとgotoでなんでも出来るんだが
331デフォルトの名無しさん:05/01/05 00:11:32
0と1で何でもできるんだが。
332302:05/01/05 00:16:35
やっとWhileにできました^^;)
教科書類もってかえるの忘れてとんでもないめにあってしまった・・・
333デフォルトの名無しさん:05/01/05 00:31:10
代入型言語厨、臭う。
334デフォルトの名無しさん:05/01/05 01:06:09
BrainFuckなら <[+-.,]> だけでなんでもできる。
335デフォルトの名無しさん:05/01/05 01:43:37
>>334
へー
じゃあもGUI作れますか??
336デフォルトの名無しさん:05/01/05 01:49:40
VMをそういう仕様にすれば作れるんじゃない?
特定のメモリアドレスに値が書き込まれたらウインドウを作る、とか。

…まあ絶対やりたくないけど
337デフォルトの名無しさん:05/01/05 03:38:59
>>336
パズル的言語として面白いかもな。
338デフォルトの名無しさん:05/01/05 08:19:30
実用するなら最低限forthくらいは必要だと思うけどな。
339デフォルトの名無しさん:05/01/05 08:20:33
スタックは欲しいよね
340デフォルトの名無しさん:05/01/05 11:34:27
コマンドを実行して標準出力と標準エラー出力を別々にファイルに出力できるかね、チミー?
341御神籤:!omikuji:05/01/05 11:54:02
わー
342デフォルトの名無しさん:05/01/05 11:58:45
行動が遅いぞ
343デフォルトの名無しさん:05/01/05 15:21:31
>>340
シェルによっては。
344デフォルトの名無しさん:05/01/05 15:28:31
>343
シェルのない環境はどうするよ、チミー?
345343:05/01/05 15:33:31
>>344
WindowsならGetStdHandleでごにょごにょ
346デフォルトの名無しさん:05/01/05 15:58:20
>>344
きもいですー にゃんにゃん
347デフォルトの名無しさん:05/01/05 16:09:34
>345
ROMやDOSでは動かない。それに〜、、、Cじゃないシィ〜
348デフォルトの名無しさん:05/01/05 16:20:29
>346
どの辺りが気持ちいい?
349デフォルトの名無しさん:05/01/05 19:06:09
>340は釣りでした。でもホントに知らない人多いんだな〜
350デフォルトの名無しさん:05/01/05 21:25:56
>>340
Cmd.exe上でならhoge > out.txt 2> error.txt
351デフォルトの名無しさん:05/01/05 21:34:12
3点を通る円の中心を求める計算プログラムを作成しろという課題が出たのですが、
連立方程式をどうやってプログラムに直したらよいか分かりません。
どなたか教えてください。
352デフォルトの名無しさん:05/01/05 21:40:59
3点の座標をscanfで入力。
計算した結果を代入。結果をprintfで出力。
353デフォルトの名無しさん:05/01/05 21:41:04
行列使え
354351:05/01/05 21:44:31
>>352 scanfに代入する式が分からないです。
355351:05/01/05 21:47:02
すいません書き方を間違えました。
x^2+y^2+ax+by+c=0というのは分かるのですが、
これをどうプログラムにしたら良いか分からないです。
356デフォルトの名無しさん:05/01/05 21:54:53
手作業で解くやり方を入力しろ
357351:05/01/05 22:00:49
>>356 手作業って何がありますか?
358デフォルトの名無しさん:05/01/05 22:03:51
1,3,9,27・・・のとうに、数値を三倍していき、その時々の各数値を表示するプログラムを作成しなさい。
ただし、数値が10000を超えたら処理を終了させるようにすること。

という宿題なのですが下記のように入力したところ1,が永遠に表示されてしまいます。
どのように訂正すればよいのでしょうか?


void main(void)
{
int a,k;

k=1;

for (a=1;k<=10000;a+2){
k=a*a;
printf("%d,",k);
}
}
359デフォルトの名無しさん:05/01/05 22:05:41
授業をモーレツに聞け。教科書見ろ。掛け算は*、割り算は/だ。+,(,)はそのまま。
360デフォルトの名無しさん:05/01/05 22:07:34
× a+2
○ a+=2 もしくは a = a + 2
361デフォルトの名無しさん:05/01/05 22:07:47
a+2は代入でない
362デフォルトの名無しさん:05/01/05 22:10:44
void main(void)
{
int k;

for(k = 1; k <= 10000; k *= 3){
printf("%d", k);
}
}
363デフォルトの名無しさん:05/01/05 22:13:47
int main(void)にしろ
364351:05/01/05 22:21:52
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,k; double cx,cy,r; double x[3],y[3];
double pivot; double a[3][4]; double erase;
printf("始点:"); scanf("%lf,%lf", &x[0], &y[0]);
printf("中間点:"); scanf("%lf,%lf", &x[1], &y[1]);
printf("終点:"); scanf("%lf,%lf", &x[2], &y[2]);
for(i=0; i<3; i++) {
a[i][0] = x[i]; a[i][1] = y[i]; a[i][2] = 1.0; a[i][3] = (x[i]*x[i] + y[i]*y[i]);
}
for(i=0; i<3; i++) {
pivot = a[i][i];
for(j=0; j<4; j++) {
a[i][j] /= pivot;
}
for(k=0; k<3; k++) {
erase=a[k][i];
for(j=i; j<4; j++){
if(k != i) a[k][j] -= erase*a[i][j];
}
}
}
365351:05/01/05 22:22:20
cx = a[0][3]/2; cy = a[1][3]/2;
r = sqrt((cx*cx) + (cy*cy) - a[2][3]);
printf("中心:(%lf, %lf)", cx, cy);
printf("半径:%lf", r);
return 0;
}
一応作ってみたんですが、これだと簡単な計算はできるのですが、
小数点などのちょっと複雑な計算だとエラーが出てしまいます。
どこを改良したらよいでしょうか?

366358:05/01/05 22:22:32
>>359〜363
レスありがとういございます。

362でできました。

367デフォルトの名無しさん:05/01/05 22:23:35
宿題の答え載せるなボケ
368デフォルトの名無しさん:05/01/05 22:24:52
スレの存在意義を否定するなボケ
369デフォルトの名無しさん:05/01/05 22:30:33
学校から苦情来るんだボケ
370デフォルトの名無しさん:05/01/05 22:32:07
誰に苦情が来るの?
371デフォルトの名無しさん:05/01/05 22:38:39
で、351はちったあわかったのか?
372デフォルトの名無しさん:05/01/05 22:43:29
つうか>>351よ、その先生はmath使えと言っていたのか?
373351:05/01/05 23:04:52
いえ、使えと言ってませんでした。
374デフォルトの名無しさん:05/01/05 23:07:39
こんなスレイラネ
375デフォルトの名無しさん:05/01/05 23:11:06
良スレハケーン(大学受験板)・・・スレタイを見よ。
http://school4.2ch.net/test/read.cgi/kouri/1102125273/

なんともム板にふさわしいスレタイではないか。「真」だ!!!
376デフォルトの名無しさん:05/01/05 23:37:25
1月11日〆切の冬休みの課題が出たのですが、よくわかりません…
[問題文]元日からの日数を入力して、何月何日かを出力する。
    閏年ではない年として計算してよい。
<入力例> 
 72
<出力例>
3月13日

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

377デフォルトの名無しさん:05/01/06 00:14:06
英単語を任意個入力して、それをアルファベット順に並び替えるプログラムを
作りたいのですが、分かりません・・・。
制御構造と関数を必ず使わなければならないそうです。
言語はCです。明日22時提出なので、よろしくお願いします!!
378デフォルトの名無しさん:05/01/06 00:15:25
>>376
Cか、C++か、はっきり汁。と言うかテンプレ使って質問汁。
379デフォルトの名無しさん:05/01/06 00:15:56
sort
380デフォルトの名無しさん:05/01/06 00:16:15
自己解決しました。ありがとうございました。
381377:05/01/06 00:17:31
すいません関数=「自分で定義した関数」のことです。
紛らわしくてごめんなさい。。
382378:05/01/06 00:21:18
>>376
一応Cで。
#include <stdio.h>

int main(void){
    int i, num, days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    printf("日数:");
    scanf("%d", &num);
    for (i = 0; i < 12; i++) if ((num -= days[i]) <= 0) break;
    if (i == 12) printf("日数大きすぎ");
    else printf("%d月%d日", i + 1, num + days[i]);
}
383デフォルトの名無しさん:05/01/06 00:59:52
>>377
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct field_tag{
    char name[16];
    struct field_tag *next;
} field;
void search_and_insert(field *dest, const field *src){
    field *temp;
    if (dest->next == NULL) {
        dest->next = (field*)malloc(sizeof(field));
        memcpy(dest->next, src, sizeof(field));
    }
    else if (!(strcmp(dest->next->name, src->name) < 0)) {
        temp = (field*)malloc(sizeof(field));
        memcpy(temp, src, sizeof(field));
        temp->next = dest->next;
        dest->next = temp;
    }
    else search_and_insert(dest->next, src);
}
void free_all(field *ptr){
    if (ptr->next != NULL) free_all(ptr->next);
    free(ptr);
}
384383(続き):05/01/06 01:00:27
int main(void){
    field *root= (field*)malloc(sizeof(field)), *cur = root, temp;
    memset(root, 0, sizeof(field));
    temp.next = NULL;
    while(scanf("%s", temp.name) != EOF){
        search_and_insert(cur, &temp);
        memset(&temp, 0, sizeof(field));
    }
    cur = root;
    while (cur != NULL){
        printf("%15s\n", cur->name);
        cur = cur->next;
    }
    if (root != NULL) free_all(root);
    return 0;
}
385377:05/01/06 01:18:55
>>383
ありがとうございます!!なにやら難しそうなプログラムなんですね。。
コンピュータ音痴で困ってました。助かります!!
386383:05/01/06 01:26:48
>>385
いや、もっと簡単に出来るんだが、手元に作り溜めがあったから、
そのままコピペしただけ。
387デフォルトの名無しさん:05/01/06 07:55:23
195と同じ質問になってしまうのですが教えてください。
プログラム全くなのでお願いします。
「標準入力から C 言語のプログラムテキストファイルを読み込み、
使用している関数名を頻度順に並べなさい。
これは宣言文と実際の式のどちらも含みます。
なお、同じ頻度の関数は辞書順に並べなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに
入力した出力を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。
但し、関数名の長さは高々 255 文字と仮定して良い。」


388デフォルトの名無しさん:05/01/06 08:37:58
>387
君の実力だとCでは無理かも知れない。ヒントは、cdecl cproto wc flex bison yacc パーサー
389デフォルトの名無しさん:05/01/06 08:44:54
動的確保とか習っていないのに使うと教師に注目される可能性がある
390デフォルトの名無しさん:05/01/06 08:50:47
boost::tokenizer や boost::spirit や std::vector に似た機能を作って
実装すると教師に注目される可能性がある
391デフォルトの名無しさん:05/01/06 08:54:35
君がどうしようもない怠け者だったら、C++ parserでぐぐれ。
392201:05/01/06 10:16:18
>>387

>これは宣言文と実際の式のどちらも含みます。
というのはどう解釈したらいいんだろ。
区別しないということでいいのか?
393デフォルトの名無しさん:05/01/06 12:26:38
[2] 文字列のリストをファイルから文字型の2次元配列に読み込み
  キーボードから読み込んだ文字列を逐次検索するプログラムを作成せよ。
[3] 環境
 [3.1] OS:ウィンドウズXP
 [3.2] コンパイラ(バージョン): コマンドプロンプト?
 [3.3] 言語:C言語
[4] 期限:2005年01月7日 午後まで

ファイルを読み込むぐらいしかわからないです、その後の検索からさっぱり
もの凄い簡単ぽいですがよかったら教えてください
394デフォルトの名無しさん:05/01/06 12:34:11
>>393
書いたところまででいいから晒してみ。
395デフォルトの名無しさん:05/01/06 12:34:39
コンパイラが何か判ってない辺り、実は全然書いてない悪寒。
396デフォルトの名無しさん:05/01/06 12:51:38
>>393
コンパイラがネ申
397393:05/01/06 12:56:39
コマンドプロンプトで bcc32 ***.c ってやってるんだけどこれコンパイラじゃないの?

とりあえず適当だけどやったソース貼ります

main()
{
FILE *f1;
char a[3][11];
char moji[3];
int i,n;

n=3;
f1=fopen("word.txt", "r");
for(i=1; i<=n; i++);
fgets(a[i], 3, f1);
fclose(f1);

printf("検索したい文字列を入力してください\n");
scanf("%s", moji);

398393:05/01/06 12:59:27
/* 逐次検索 */

  while(i<n && a[i]!=moji)
i++;

if(a[i]==moji)
printf("%3s は %3d 番目にみつかりました\n", moji, i);
else
printf("%3s は見つかりませんでした\n", moji);

return 0;
}

なんかずれた、後一番上に
#include <stdio.h>
#include <string.h>
抜けてました
399デフォルトの名無しさん:05/01/06 13:18:56
専門か大学かは知らんが、その程度のことも教えられていないし、自分で調べようともしていないのか
400デフォルトの名無しさん:05/01/06 13:25:49
>>397

それボーランドのフリーコンパイラー。
401デフォルトの名無しさん:05/01/06 13:29:03
>>393
突っ込みどころが多過ぎ。
特に酷いのは、
・二次元配列の使い方
・検索ロジック
の2点。
前者は勉強し直せ。後者は標準ライブラリ関数を使うのが無難。
そうそう、配列の要素数の取り扱いについても要注意で。
402デフォルトの名無しさん:05/01/06 13:31:08
>397は、プログラムは全てウィンドウを持っていると思い込んでいる悪寒。
少なくとも、bcc32が独立したプログラムと認識してないと思われ。
403デフォルトの名無しさん:05/01/06 13:52:04
まあ、ゆっくり料理の本を読もうゼ。
404デフォルトの名無しさん:05/01/06 15:01:35
なんでstring.hをインクルードしてるのに比較を(ry
405デフォルトの名無しさん:05/01/06 16:19:51
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):1.キーボードから5つの実数データを入力し、その
・合計
・平均
・最大値
・最小値
・範囲
を求めるプログラムを作成せよ。
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ(バージョン): ?
 [3.3] 言語:C/C++/どちらでも可 のいずれか :C
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか 2005年01月06日17:00
[5] その他の制限:
お願いします
406デフォルトの名無しさん:05/01/06 16:38:19
>>405
おいてめーマルチしてんだろうが
C言語なら俺に聞けのスレであやまってきたら解いてやるぜはげ
407デフォルトの名無しさん:05/01/06 16:39:22
ていうか過去ログ読めば答え載ってそうだけど?
408デフォルトの名無しさん:05/01/06 17:02:08
その程度なら自分でできるべ
つーかなんで使ってるコンパイラさえ知らないんだヴォケ
とマルチ初心者厨に言ってみる
409デフォルトの名無しさん:05/01/06 17:02:40
>1-407
解決しました
410デフォルトの名無しさん:05/01/06 17:10:30
#include <stdio.h>
#include <stdlib.h>
#define NaN (0)/* 数値が得られないことを示せればいい */
#define numberof(x) (sizeof(x)/sizeof(*(x)))
static double total(double * pValues, int nValues)
{
int ic;
double total = 0;
for (ic = 0; ic < nValues; ++ic) {
total += pValues[ic];
}
return total;
}

static double average(double * pValues, int nValues)
{return nValues == 0 ? NaN : total(pValues, nValues) / nValues;}

static double maximum(double * pValues, int nValues)
{
int ic;
double maximum;
if (nValues == 0) {
return NaN;
}
maximum = pValues[0];
for (ic = 1; ic < nValues; ++ic) {
if (maximum < pValues[ic]) {
maximum = pValues[ic];
}
}
return maximum;
}
411デフォルトの名無しさん:05/01/06 17:11:05
static double range(double * pValues, int nValues)
{return maximum(pValues, nValues) - minimum(pValues, nValues);}

int main(void)
{
static const char * const sLabels[] = {"1st", "2nd", "3rd", "4th", "5th",};
double values[numberof(sLabels)];
int ic;
for (ic = 0; ic < numberof(sLabels); ++ic) {
char buf[100];/* 実数値一個のためにはこんなに要らね */
printf("Input %s value.\n", sLabels[ic]);
if (fgets(buf, sizeof(buf), stdin) == NULL) {
return EXIT_FAILURE;
}
values[ic] = atof(buf);
}
printf("total:%.10g\n"
"average:%.10g\n"
"maximum:%.10g\n"
"minimum:%.10g\n"
"range:%.10g\n",
total(values, ic),
average(values, ic),
maximum(values, ic),
minimum(values, ic),
range(values, ic));
return EXIT_SUCCESS;
}
412デフォルトの名無しさん:05/01/06 17:34:25
見肉
413デフォルトの名無しさん:05/01/06 17:37:40
/* これで充分 */
int main(void)
{
 char buf[100]; /* 実数値一個のためにはこんなに要らね */
 unsigned num = 0;
 double total = 0;
 double minimum = NaN;
 double maximum = NaN;

 while (fgets(buf, sizeof(buf), stdin)) {
  double value = atof(buf);
  ++num;
  total += value;
  if (num == 1 || value > maximum) {
   maximum = value;
  }
  if (num == 1 || value < minimum) {
   minimum = value;
  }
 }
 printf("total:%.10g\n"
  "average:%.10g\n"
  "maximum:%.10g\n"
  "minimum:%.10g\n"
  "range:%.10g\n",
  total,
  total / num,
  maximum,
  minimum,
  maximum - minimum);
 return EXIT_SUCCESS;
}
414デフォルトの名無しさん:05/01/06 18:39:20
0x07 (0111) の
 右から1番目のbitは?  → 1
 右から2番目のbitは?  → 1
 右から3番目のbitは?  → 1
 右から4番目のbitは?  → 0

って感じにしたいんだがどうやればいいんだ?
標準関数で、任意の位置のbitを調べるものとかってある?
415デフォルトの名無しさん:05/01/06 18:42:41
シフトして逐一mod2とか?
416デフォルトの名無しさん:05/01/06 18:46:41
CとC++どっちがいい?
417デフォルトの名無しさん:05/01/06 18:47:24
>414
整数nの左からi+1番目のビットは!!(n&(1<<i))です。
418デフォルトの名無しさん:05/01/06 18:49:05
>417
右の間違い
419デフォルトの名無しさん:05/01/06 18:51:16
あ、忘れてた。C言語でお願いしたい

for(a=7;a!=0,a>>=1){
b=a;
if (b&=1) ==1) printf( "bit=%d",b);
}
ってのを自分考えたんだけど
420デフォルトの名無しさん:05/01/06 18:52:02
>>414
マスク処理
421デフォルトの名無しさん:05/01/06 18:52:19
>417-418 ありがと
422デフォルトの名無しさん:05/01/06 18:54:40
// C++
#include <iostream>
#include <bitset>
using namespace std;

int main(){
    bitset<4> bs(0x07);
    for(int i = 0; i < bs.size(); i++)
        cout << "右から" << i << "番目のbitは? → " << bs[i] << endl;
    return 0;
}

/* C(もちろんC++でもOK) */
int main(){
    unsigned int n = 0x07;
    for(int i = 0; i < 4; i++)
        printf("右から%d番目のbitは? → %d\n", i, n >> i & 1);
    return 0;
}
423デフォルトの名無しさん:05/01/06 18:55:29
書き忘れ

後者に#include <stdio.h>
424デフォルトの名無しさん:05/01/06 18:56:16
ミスって途中で送信

ってのを自分では考えたんだけど、これだと元の値が変わってしまう
3変数使えば問題なくできるんだけど、なんか上手い方法はないかなぁ、と


と書いていたら返答が。皆ありがとう
425デフォルトの名無しさん:05/01/06 20:16:08
すみません、よろしくお願いします。

[1] 授業単元: 数値計算プログラミング実習
[2] 問題文(含コード&リンク):
1・二次関数の二次の係数、一次の係数、定数 a,b,c と
xの最大値、最小値およびyの最大値、最小値を入力し、二次関数のグラフを描画するプログラムを作成してください。
xの最小値、最大値が1行めから20行目に
yの最小値、最大値が1ます目から40ます目に対応するようにしてください。
グラフは '*" で描画してください。

2・上記グラフに、X軸Y軸を'+'で描画し
グラフ上のf(x)=0の解の近傍点を'@"で描画してください。
[3] 環境
OS:solaris
言語:C言語
[4] 期限:2005年1月11日
[5] その他の制限:includeするのは、できるだけ<stdio.h>のみ。
426デフォルトの名無しさん:05/01/06 20:45:52
<問題>
保存してあるファイルの内容を読み出して、各文字列の先頭に行番号を
付けて、画面に1ページごとに表示するプログラムを作成する

<制限>
getchを使う
ページが変わっても番号は振りなおさない

よろしくお願いします
427デフォルトの名無しさん:05/01/06 20:51:12
>425
char[][]仮想画面で描くのが一番かっこいいやり方だ。分からなかったらy軸を平行にたどりながら、左上から右下に描いていきな
428デフォルトの名無しさん:05/01/06 20:55:59
>426
小さな紳士よ、重複投稿は顧客を失うゾ
429デフォルトの名無しさん:05/01/06 20:59:08
>>428
すいません、問題自体を丸投げする場合はやはりこちらかと思いまして・・
以後気をつけます。
430デフォルトの名無しさん:05/01/06 21:00:46
[3] 環境
 [3.1] OS: LINUX
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C言語

直線をBMPファイルで保存するプログラムを作成したのですが、
出来た画像が上下さかさまになってしまいました。
課題はこのままで提出しましたが、何故上下さかさまになる理由がわかりません。
どうか教えてください。お願いします


431デフォルトの名無しさん:05/01/06 21:03:15
BMPは左下から保存するから。
432デフォルトの名無しさん:05/01/06 21:06:35
>430
M$の設計したデータ仕様に例外はつきものさ。確か高さを負にしなければy座標が逆になる。BITMAPINFO,BITMAPINFOHEADERを参照。
433デフォルトの名無しさん:05/01/06 21:12:55
ディスプレイ表示上の理由が無いではない。
434デフォルトの名無しさん:05/01/06 23:07:35
C++Builder を使用しています。
ブラックジャックを作るうえで、
1.実際のカードの数値とブラックジャックで使用する数値が異なる点(Kが13ではなく10であったり)
2.Aは1と11と、場合によって二つの数値になるので、それをどう処理するか。
  Aが複数手元に来た場合、片方だけ11から1にするにはどうしたらよいのか

悩んでいます。何か良い方法は無いでしょうか?
435デフォルトの名無しさん:05/01/06 23:07:59
[1] 授業単元:信号処理
[2] 問題文(含コード&リンク):単純移動平均を用いて、入力sin(400πt)+cos(200πt)+1+U
(ただしUは一様乱数、データ数2000点、サンプリング間隔τ=0.0001[s])に対して
平滑化点数m=5 (N=11)としたときの結果を出力せよ。
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ(バージョン): Cygwin?
 [3.3] 言語:C
[4] 期限:来週まで
[5] その他の制限: なし。
ソース→ ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
 ろだの宿題の答えはここに書け!!No49のソースで入力信号はデータとして出力できるのですが、単純移動平均を
適用するためにどう変形すればいいかわかりません。データ点数が11個あるので、
前後5つのデータと自身を単純平均したデータを一つのデータとして出力するのでしょうが・・
よろしくおねがいします。

436デフォルトの名無しさん:05/01/06 23:13:48
>>434
2番について
1枚目のAは保留にしておく
2枚目以降のAは必ず「1」とする
最後に1枚目のAを21を超えないように決定する
の順でいいかと
437デフォルトの名無しさん:05/01/06 23:22:17
>>431 >>432 >>433 SAMA
どうもありがとうございました
438デフォルトの名無しさん:05/01/06 23:39:24
>>426
こんな感じ?

【テキストファイル】
zero one two three ...
twenty_five twenty_six twenty_seven twenty_eight ...

【実行内容】
[1ページ目]
0 zero
1 one
2 two
3 three
...

(矢印キー等を押す)

[2ページ目]
0 twenty_five
1 twenty_six
2 twenty_seven
3 twenty_eight
...
439デフォルトの名無しさん:05/01/07 00:06:43
>>438
> ページが変わっても番号は振りなおさない
                    ~~~~~~~~~~
440デフォルトの名無しさん:05/01/07 00:07:38
Whileを使い1〜10までの整数の二乗を計算して表示するプログラムを作成しなさい。
という宿題なのですがうまくコンパイルできませんどこがわるいのでしょうか?

#include <stdio.h>
void main(void)
{
int s,k;

printf("X X**2\n");

k=1;

while(k<=10){
s=k*k;
printf("%d…  %d\n",k,s);
}
k++;
printf("\n");
}
return 0;
}

441デフォルトの名無しさん:05/01/07 00:09:22
>>440
printf("%d…  %d\n",k,s);
} ←こいつが余計
k++;
442デフォルトの名無しさん:05/01/07 00:09:23
中括弧がちゃんと全部対応してるか確認しなさい。
443デフォルトの名無しさん:05/01/07 00:14:20
前にも思ったんだけど、こいつWhileなんて書いてる時点で
学校やめた方がいいと思う
444デフォルトの名無しさん:05/01/07 00:20:21
VBの香りがするな、懐かしい…
445440:05/01/07 00:35:49
>>441

ありがとうございました。
きちんとコンパイルされました。
446デフォルトの名無しさん:05/01/07 00:35:54
>>440
スマートに書くとこんなカンジ

#include <stdio.h>
int main(void)
{
printf("X X**2\n");
for(int k=1; k<=10; k++) printf("%d… %d\n", k, k*k);
printf("\n");
return 0;
}
447440:05/01/07 00:39:16
>>446
For版で書いていただきありがとうございます。
今回の宿題ForとWhileの二つ提出でForは私も考えられたのですが、
Whileの変換でへんなところに{いれててエラーになってました・・・
448434:05/01/07 00:39:24
>>436
ありがとうございました。

トランプの識別は構造体を利用しているんですが、1番の質問に何か良い考えはないものでしょうか…。
上手い方法が全く思い浮かばなくて。
449デフォルトの名無しさん:05/01/07 00:46:50
構造体に得点のメンバつければいいだけちゃうんかと
450デフォルトの名無しさん:05/01/07 01:20:20
>>391
C++ parserって何ですか?
451デフォルトの名無しさん:05/01/07 01:32:34
>>450
 _, ._
(;゚д゚) ・・・・


"C++ parser" じゃなくて、C++ と parser だろ。
452デフォルトの名無しさん:05/01/07 01:33:58
453デフォルトの名無しさん:05/01/07 01:40:39
>>451
C++ と parser ???
どうゆうことですか?
454デフォルトの名無しさん:05/01/07 01:50:13
ぐぐる[ラ四動詞] Google(などの検索エンジン)で検索すること。

つまり

Googleで"C++ parser"をキーワードにして検索しろってこった
455デフォルトの名無しさん:05/01/07 01:54:18
検索してみたのですが文法がでているやつですか?
456デフォルトの名無しさん:05/01/07 03:40:10
並べ替えたい単語数を入力して、
英単語をその数だけ入力して、
アルファベット順に並べるプログラムってどうやって作れますか?

どうかよろしくお願いします。
457デフォルトの名無しさん:05/01/07 04:18:14
>>561 マルチいくない。
英単語アルファベット順にソートするなら
strncmpあたりか先頭文字の値を比較すればいいんでないかな。
あんま覚えてないんで間違ってるかもしれない。

宿題じゃないんですが…宿題の一部で、なんとかならないかなと
思うところがあるので質問させていただきます。
[2] 問題文(含コード&リンク):
12345…Nのという数列があるとする。
数を並びえた数列はN!個あるが、それらをすべて列挙するアルゴリズムきぼん。

例えばN=3のときは3!=6個、以下のように求める。
0:123  1:132
2:213  3:231
4:312  5:321

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ(バージョン): GCC
 [3.3] 言語:C
[5] その他の制限:
ただし、以下のような総当りをしてはいけない。
111->false  112->false
113->false  121->false
122->false  123->TRUE
また、生成値を与えると一意に数列が決まったりするとなお良い。
例:0を引数にすると123を返し
1を引数にすると132を返し
5を引数にすると321を返す、など.

スレ違いかと存じますが、いい案があったら教えてください
458457:05/01/07 04:22:40
アンカー誤爆。
>>561は別スレの>>456でしたorz
459デフォルトの名無しさん:05/01/07 08:47:52
>457
最初の数字で場合分けしたら、次の文字で場合分けし、…(略)。これで場合分けの木ができる。木の要素を規則的に並び換え、番号を付ける。
460デフォルトの名無しさん:05/01/07 09:02:12
>455
怠け者決定
461デフォルトの名無しさん:05/01/07 09:14:21
>>457

int Factorial(int n){
    int m = 1, i;
    for(i = 2; i <= n; i++)
        m *= i;
    return m;
}

void swap(char *v1, char *v2)
{
    char tmp;
    tmp = *v1;
    *v1 = *v2;
    *v2 = tmp;
    return;
}

/* 次に続く */
462デフォルトの名無しさん:05/01/07 09:15:16
/* 前の続き */

int GetSeries(int number, int order)
{
    int i, n;
    char *tmp = malloc(number + 1);

    for(i = 0; i < number; i++)
        tmp[i] = '1' + i;
    tmp[number] = '\0';

    for(i = 0; i < number - 1; i++){
        n = order / Factorial(number - i - 1);
        swap(tmp+i, tmp + i + n);
        //printf("%d→", order);
        order %= Factorial(number - i - 1);
        //printf("%d\n", order);
    }
    n = atoi(tmp);
        free(tmp);
    return n;
}

int main(void)
{
    int i, n = 4;
    for(i = 0; i < Factorial(n); i++)
        printf("%d: %d\n", i, GetSeries(n, i));
    return 0;
}
463デフォルトの名無しさん:05/01/07 09:17:08
#include <stdio.h>
#include <stdlib.h>
これつけといてorz

工房の弱い頭で考えたらこれが限界。ショボくてスマソorz
464デフォルトの名無しさん:05/01/07 09:49:41
>>457
#include <stdio.h>

void hoge(int x, int n, unsigned bits, char buf[])
{
  int i;

  if (x > n) {
    puts(buf);
    return;
  }
  for (i = 0; i < 9; i++) {
    if (bits & (1 << i)) {
      buf[x - 1] = '1' + i;
      bits &= ~(1 << i);
      hoge(x + 1, n, bits, buf);
      bits |= (1 << i);
    }
  }
}

int main(int argc, char *argv[])
{
  int n = argv[1][0] - '0';
  unsigned bits = ~((~0) << n);
  static char buf[10];

  hoge(1, n, bits, buf);
  return 0;
}
465デフォルトの名無しさん:05/01/07 10:28:39
1〜9までの階乗を求め表示するプログラムを作成しないさい。
例:
5の階乗 5!=120 求め方→5!=5*4*3*2*1
9の階乗 9!=362880 求め方→9!=9*8*7*6*5*4*3*2*1

という課題なのですが

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

for(a=1;a<=9;a--){

までしか考えられないのですがどのように書けばよいのでしょうか?よろしくお願いいたします。
466426:05/01/07 10:34:24
>>438
それだと思います^^;どのようにしたらよいのでしょうか?
MSXベーシックなら簡単なのに・・・
467デフォルトの名無しさん:05/01/07 10:46:42
int a,b,c;

for(a=1;a<=9;a--){

までしか考えられないのですがどのように書けばよいのでしょうか?よろしくお願いいたします。

466 名前:426 :05/01/07 10:34:24
>>438
それだと思います^^;どのようにしたらよいのでしょうか?
MSXベーシックなら簡単なのに・・・

名前: E-mail:
468デフォルトの名無しさん:05/01/07 11:09:14
>>465
long Factorial(int x)
{
    int i;
    long y;
    for (i = 1; i <= x; i++)
        y *= x;
    return y;
}

int main(void)
{
    int i;
    for (i = 1; i <= 9; i++)
        printf("%d!\t%ld\n", i, Factorial(i));
    return 0;
}
469デフォルトの名無しさん:05/01/07 11:17:27
>>466
C++でgetchの制限さえなければCより簡単。宿題だから仕方ないけど。
470デフォルトの名無しさん:05/01/07 12:24:42
>>465
int main(void)
{
 int a=1, i;
 for (i=1; i<=9; ++i) {
  a *= i;
  printf("%d!\t%ld\n", i, a);
 }
 return 0;
}
471デフォルトの名無しさん:05/01/07 12:45:10
>>457で、一意に数列を返す
#include<stdio.h>
#include <stdlib.h>
unsigned d;
void sub( char *s, unsigned n, unsigned x, unsigned a )
{
  unsigned i,t;
  for( i=0; i<n; i++ ){
    if( n==1 ) if( a==0 || ++d==a ) printf("%s\n", s);
    t=*(s+x-n),*(s+x-n)=*(s+x-n+i),*(s+x-n+i)=t;
    sub( s, n-1, x , a );
    t=*(s+x-n),*(s+x-n)=*(s+x-n+i),*(s+x-n+i)=t;
  }
}
int main( int argc, char *argv[] ){
  char str[10]={0}, i, n=(argc>=2)?atoi(argv[1]):0;
  d=0;
  for( i=0; i<n; i++ ) str[i]=i+'0'+1;
  sub( str, i, i, (argc>=3)?atoi(argv[2]):0 );
}
472デフォルトの名無しさん:05/01/07 13:05:23
[2] 問題文(含コード&リンク):
n個の英単語を入力し、アルファベット順に並び替えて
  出力するプログラムを、関数及び制御構造を必ず用いて
  作成せよ。なお、nは有限であっても良いが固定であっては
  ならない。
[3] 環境
 [3.1] OS: Windows XP Home
 [3.2] コンパイラ(バージョン): Visual Studio.NET 2003
 [3.3] 言語:C
[4] 期限:2005年01月07日22:00まで

出直してきました。どうかお願い致します。
473デフォルトの名無しさん:05/01/07 14:19:31
>>470

ありがとうございました!!printf少しいじって例題のように出力できるようになりました。
474C言語です。:05/01/07 14:28:07
int a,b,x,y;


if(a>b){
x
} else if(a<b){
y
}

この式あってますか?

もしa>bならx,b<aならyとしたいのですが。
475デフォルトの名無しさん:05/01/07 14:30:47
a==bの時は?
そもそも何をxにしたいの?
476デフォルトの名無しさん:05/01/07 14:30:54
a==bのときはどうするんだ?
477デフォルトの名無しさん:05/01/07 14:31:23
x,yは文ではないようですね
478474:05/01/07 14:35:09
みなさんありがとうございます。

まずa==bは無視しています。

xは赤、yは青という意味です。
479デフォルトの名無しさん:05/01/07 14:37:07
>>478
いやそうじゃなくて、プログラム中に
1+2; と書いても間違いではないけど意味はないだろ
xとyをどうしたいのさ
480474:05/01/07 14:42:33
えっと、474と同じようなプログラムが他に3つあるのですが、
それぞれのプログラム内で、青か赤かを認識させといて、
4つを総合させたいんです。。
481474:05/01/07 14:44:35
・・・なんか意味不明ですよね^^;
うまく書けない(><)
482デフォルトの名無しさん:05/01/07 14:47:31
[2] 問題文(含コード&リンク):
文字列を入力として受付け、“end”が入力されるまで入力を繰り返し受け付ける。
“end”が入力された場合、それまで入力した文字列の内、長さが一番長いものを出力する。
ただし、最大の要素数の指定にはマクロを用いること。

例)
a
ab
abc
abcd
end
出力結果:abcd
[3] 環境
 [3.1] OS:Windows XP pro
 [3.2] コンパイラ(バージョン):Visual C++.net 2003
 [3.3] 言語:C
[4] 期限:2005年1月8日朝9:00まで

どなたかお願い致します。もう全然お手上げなんです。
483デフォルトの名無しさん:05/01/07 14:56:29
急に増えてきたな。そろそろ学生の正月休みが終わる頃だからかな。
484デフォルトの名無しさん:05/01/07 15:01:35
>>482
#include <stdio.h>
#include <string.h>
#define N 10 // 最大要素数
int main()
{
  char buf[N][256];
  int i=0, len_max=0, len, index=0;
  for(;;) {
    fgets(buf[i], sizeof(buf[i]), stdin);
    len = strlen(buf[i]);
    buf[i][len-1]='\0';
    if (strcmp(buf[i], "end") == 0)
      break;
    if (len_max < len) {
      index = i;
      len_max = len;
    }
    if (++i == N)
      break;
  }
  if (i != 0)
    printf("%s\n", buf[index]);
  return 0;
}

あまりスマートじゃないですが orz
485デフォルトの名無しさん:05/01/07 15:35:51
>>484
スマートさは兎も角、fgets()!=NULLは確認する癖をつけたほうがいい。
486デフォルトの名無しさん:05/01/07 15:38:57
>>472
改行思いっきり詰めたから適当に直して
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char** add_str(char** a,int n,const char* s)
{
char** p;
p=realloc(a,sizeof(char**)*(n+1));
if(p){p[n]=malloc(strlen(s));if(p[n]){strcpy(p[n],s);}else{p=NULL;}}
return p;
}
int sort_sub(const void* x,const void* y){return strcmp(*(char**)x,*(char**)y);}
#define MAX_STR1024
int main()
{
int i,n;
char** a=NULL;
char** p;
char s[MAX_STR];
puts("Ctrl+Z [ENTER] で終了");
for(n=0;;n++){
printf("%d>",n);
if(fgets(s,MAX_STR,stdin)==NULL)break;
p=add_str(a,n,s);
if(p==NULL){puts("メモリ不足");exit(1);}
a=p;
}
qsort(a,n,sizeof(char**),sort_sub);
for(i=0;i<n;i++){printf("%s",a[i]);}
return 0;// 解放はOSにまかすさよなら
}
487デフォルトの名無しさん:05/01/07 15:42:27
[訂正]
ああスペースがつぶれた.↓
#define MAX_STR 1024
488デフォルトの名無しさん:05/01/07 15:43:20
>>485
あ、忘れてました…
指摘ありがとうございます。
489457:05/01/07 16:04:19
みなさんありがとうございます。
まだ内容を吟味はしていないのですが、理解に努めますorz
490472:05/01/07 16:29:46
どうか助けて下さい m(_ _)m
491デフォルトの名無しさん:05/01/07 16:31:42
>>490
上のほうでだれか書いてなかったっけ
492デフォルトの名無しさん:05/01/07 16:47:52
C言語の宿題です。ちょっと分りにくいかも。

**** text.txt ****

awsedr
ftgy
*
hujikolp
*
zsxdc
vcgbn
*
vnytk
wruigf
 ・
 ・

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

こんな感じのtext.txtというテキストファイルがあって
不規則的に「*」が数行置きに置かれてます。
これを

hoge[0].str[0]={"awsedr"}
hoge[0].str[1]={"ftgy"}
hoge[1].str[0]={"hujikolp"}
hoge[2].str[0]={"zsxdc"}
hoge[2].str[1]={"vcgdn"}

こんな感じにします。
これはどうやればいいんですか?
とりあえずforを使うっていうのは分ったんですが・・・
493デフォルトの名無しさん:05/01/07 17:19:00
while(fgets(buf, sizeof(buf), /*** ファイル ポインタ ***/) != NULL){
  if(!strcmp(buf, "*")){
    i++;
    j = 0;
  } else {
    /*** hogeを動的に確保する場合は数に応じて拡張 ***/
    strcpy(&(hoge[i].str[j]), buf);
    j++;
  }
}
494492:05/01/07 17:22:43
>>493
レスありがとうございます。
でもコードが難しくてよく理解できないので
もし良かったら、どういう仕組み(?)に
なっているのか教えてください。
bufがファイルポインタなのかな・・・?
495デフォルトの名無しさん:05/01/07 17:32:19
>>494
コードが難しいから理解できないんじゃなくて、
単に君の知識が不足してるから理解できないだけなわけだが。
496デフォルトの名無しさん:05/01/07 17:34:31
×知識
○知能
497デフォルトの名無しさん:05/01/07 17:34:41
>>495
ほとんど同じ意味だろソレ
498デフォルトの名無しさん:05/01/07 17:42:47
毒舌吐かないと気がすまない人はカルシウム不足
499492:05/01/07 17:45:48
本当に分らないんです。
while(fgets(buf, sizeof(buf), /*** ファイル ポインタ ***/) != NULL){
このコメントのところに、ファイルポインタを書くという意味ですか?
だとすると、bufは何の変数なんでしょうか
500482:05/01/07 17:47:13
>>484
早い解答、ありがとうございました!
501464:05/01/07 17:48:02
464
sage
>>457 463さんの方法で464の順列を生成してみました
#include <stdio.h>
long kaijo[] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880};
long hoge(int n, long d) {
  int i, j, a, b;
  unsigned bits = ~((~0) << n);
  long x = 0;
  for (i = 1; i <= n; i++) {
    a = d / kaijo[n - i];
    b = 0;
    for (j = 0; j < 9; j++) {
      if (bits & (1 << j))
        b++;
      if (b > a)
        break;
    }
    x = x * 10 + (1 + j);
    bits &= ~(1 << j);
    d %= kaijo[n - i];
  }
  return x;
}
int main(int argc, char *argv[]) {
  int n = argv[1][0] - '0';
  long i;
  for (i = 0; i < kaijo[n]; i++)
    printf("%ld\n", hoge(n, i));
  return 0;
}
502デフォルトの名無しさん:05/01/07 17:49:21
>>499
man fgets
503201:05/01/07 17:57:52
>>499
バッファ(Buffer)
504デフォルトの名無しさん:05/01/07 18:02:12
505492:05/01/07 18:16:38
なんかエラーが出るんですけど・・・
'strcpy' : 1 番目の引数を 'char (*)[256]' から 'char *' に変換できません。
ヽ(`Д´)ノウワァァン!!
506デフォルトの名無しさん:05/01/07 18:20:53
&とれよ
507492:05/01/07 18:23:48
>>506
コンパイルできました!ありがとうございます!
頭いいですね!
508デフォルトの名無しさん:05/01/07 19:06:22
>>507
お前が馬鹿すぎるんだよ。
509デフォルトの名無しさん:05/01/07 19:11:59
こういう課題が出るってことは最低でも高校生だよなぁ
とてもそうは思えない奴が多すぎだ

出来のいい奴はこんなところに来ないだろうから、特にそう見えるのかもしれないが
510デフォルトの名無しさん:05/01/07 19:14:51
まぁ、ちょっと調べればできることなのに何も調べないなさそうな奴多そうだし。
511デフォルトの名無しさん:05/01/07 19:40:08
ちょっと調べるより、質問丸投げの方が楽だからな…
512デフォルトの名無しさん:05/01/07 19:50:34
そうでもない。
513デフォルトの名無しさん:05/01/07 19:52:01
さんざん答えた後に言うなよ・・・
514デフォルトの名無しさん:05/01/07 21:47:24
まあ、なんて聞いたらいいのか解らんときもあるさ
515デフォルトの名無しさん:05/01/08 05:05:51
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):
テキストファイルの入力に対して行数の短い順に並べて出力しなさい。空行は出力しないこと。

例)
abcd
abcdef
ab
abc

出力結果:
ab
abc
abcd
abcdef

[3] 環境
 [3.1] OS: Windows XP pro
 [3.2] コンパイラ(バージョン): Visual Studio 6
 [3.3] 言語:Cのみ
[4] 期限:2005年01月14日22:00まで
自力で半月頑張りましたが、ファイル読み込みまでしかうまく出来ませんでした
どうかお願いします。
516515:05/01/08 05:12:19
自己解決しました。ありがとうございました。
517ぼるじょあ ◆yBEncckFOU :05/01/08 05:18:23
(・3・) エェー どういたしましてですYO
518515:05/01/08 05:19:27
数分で解決出来たらこんなに悩んでませんorz
519デフォルトの名無しさん:05/01/08 05:24:14
7分で解決出来てるじゃんw
520515:05/01/08 05:27:11
>>519
一目瞭然だと思いますが、516は偽者の発言です
521デフォルトの名無しさん:05/01/08 05:31:01
>>515
ソートするの
行あたり文字数の上限は
どこに出力するの
522デフォルトの名無しさん:05/01/08 05:36:07
C++とかJavaとかじゃないと解く気しねーな
523515:05/01/08 05:36:18
>>521
80行を超えた分は無視して読み込まないで、
表示は実行ウインドウに表示されれば良いみたいです。
524デフォルトの名無しさん:05/01/08 05:39:43
行数の上限はあるの?
525515:05/01/08 05:41:20
行数の上限の指定はありませんでした。
526515:05/01/08 05:58:45
>>213
80行を超えた分 ->80文字
でした。何度もすいません。
527515:05/01/08 06:05:20
>>523
80行を超えた分 ->80文字を超えた分
でした。
徹夜で何かパニくってましたorz
ホントに何度もすみません。
528デフォルトの名無しさん:05/01/08 06:34:14
空行って改行しかない行?
それともスペースやタブしかない行?
529デフォルトの名無しさん:05/01/08 06:51:54
>>515
反応がないので空行=改行しかない行として作ったぞ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/50.txt
530529:05/01/08 07:14:33
全然だめぽなんで作り直すからちょっと待ってて
531515:05/01/08 07:29:35
すいません、少し席をはずしてました。
こんなに早く作って頂きまして、ホントに感謝です!
さっそく実行してみますね。
532515:05/01/08 07:47:18
>>528
空行は改行しかない行で良いと思います。
533529:05/01/08 07:56:34
>>515
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/52.txt
ちゃんと動くかどうか確かめたいけどもう眠気を抑えきれん…
ちゃんと動いたとしても部品の出来が糞なんで
自分で改良して提出してくれ…

んじゃ漏れはもう寝る…
534515:05/01/08 08:03:36
529さん、ありがとう御座います。
これから色々試して出きる限り動くように頑張ろうと思います。
おかげさまで助かりました!
535デフォルトの名無しさん:05/01/08 10:43:52
ぬるっぽ
536デフォルトの名無しさん:05/01/08 11:01:30
ぐるっがああっ
537デフォルトの名無しさん:05/01/08 11:43:52
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: UNIX Solaris
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C++

質問したいのは、主に どのようにして辞書順にソートするかです。
インプットは、一行に一単語のテキスト形式で それを読み込み、辞書順に
並び替えて別のテキストに出力するという 単純なプログラムを作らなけれ
ばなりません。

ポイントとしましては、
Typeをmainとは別ファイルに作る。
makefileを作る。

自分が一番分からないところは、どのように辞書順に並び替えるかです。
strcmpでは、辞書順にならないし、もちろん >や<でもなりません。
又、Typeを別ファイルで作るという事ですが 多分、Compareや、Sortといった
ファイルを作って、単語同士の比較をそちらにやらせるという感じになると
思うのですが、今一具体的に アイデアがわきません。

助けてください! 御願いします。。
538デフォルトの名無しさん:05/01/08 12:32:02
>>537
std::lexicographical_compare()
539デフォルトの名無しさん:05/01/08 12:32:27
ソート基準は関数オブジェクトで
540デフォルトの名無しさん:05/01/08 13:10:19
>>537
条件を満たしてないので参考までに

#include <fstream>
#include <algorithm>
#include <vector>
#include <string>
#include <iterator>
#include <utility>
#include <functional>

using namespace std ;

inline bool my_comp( const string& lhv, const string& rhv )
{ return lexicographical_compare( lhv.begin(), lhv.end(), rhv.begin(), rhv.end() ) ; }

int main( int argc, const char* argv[] )
{
vector<string> strs ;
ifstream ifile( argv[1] ) ;
ofstream ofile( argv[2] ) ;
copy( istream_iterator<string>( ifile ), istream_iterator<string>(), back_inserter( strs ) ) ;
sort( strs.begin(), strs.end(), ptr_fun( &my_comp ) ) ;
copy( strs.begin(), strs.end(), ostream_iterator<string>( ofile, "\n" ) ) ;
return 0 ;
}

541デフォルトの名無しさん:05/01/08 18:53:47
CでDOSスロットマシーンを作るのですうわなにをするやめrppppppp@@@@@@@@@@@
542デフォルトの名無しさん:05/01/08 19:59:10
tes
543デフォルトの名無しさん:05/01/08 20:28:28
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/53.txt
課題をここまでやったのですが実行結果が変なのです
試行錯誤したんですが限界で・・・どなたかお願いします
544デフォルトの名無しさん:05/01/08 20:46:11
>>543
mplus関数にn,mの情報が渡されてない
あと
main関数の下から5行目はnじゃなくてm
545デフォルトの名無しさん:05/01/08 20:55:49
>544
分かりました、何とかやってみます
546537:05/01/08 21:18:16
すばやい返答ありがとうございました!
早速、lexical_compareを使ってやってみたいと思います。

又分からない事がでてきたら、よろしくおねがいします。
547537:05/01/08 22:34:50
537です。

540さんと、538さんの発言をヒントに、lexicographical_compareを使ってやっていたのですが、コンパイルエラーが出て困っています。
一つだけ出るのですが、ClassのDeclareに問題がある模様です。おかしい所は無いように、
私には見えるのですが。。。

一応、無理やりですが 宿題の指示通り、 別クラスにタイプを作ってどうこうしなければならない
ので、mainを sorter.cppに入れて、 そのほかに compare.cpp と compare.h を作りました。
これらのファイルのリンクが上手くいっていないのかな。。

一応今まで書いたコードをUPしてみましたので もしよかったら目を通してやってください。
問題点があまり分からないです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/54.zip

参考になるかわかりませんが、宿題の内容もアップしておきました。英語ですいません。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/55.txt

よろしく御願いします!
548デフォルトの名無しさん:05/01/09 01:37:12
>>547
std::lexicographical_compare()なんて使うならstd::stringのメンバ関数の
operator<()使っても何の違いもないと思うんだけど。
549デフォルトの名無しさん:05/01/09 01:44:17
>>547
そっち、突っ込みどころだらけ。次のコードのmy_compを別ファイルに
移せば一応条件は満たしていると思うが。
#include <fstream>
#include <algorithm>
#include <vector>
#include <string>
#include <iterator>
#include <utility>
#include <functional>

struct my_comp
{
    bool operator()(const std::string& x, const std::string& y)
    {
        return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
    }
};

int main(int argc, char* argv[])
{
    if (argc < 3) return 1;
    std::ifstream input(argv[1]);
    std::ofstream output(argv[2]);
    if (!input.is_open() || !output.is_open()) return 1;
    std::vector<std::string> dic;
    dic.assign(std::istream_iterator<std::string>(input), std::istream_iterator<std::string>());
    std::sort(dic.begin(), dic.end(), my_comp());
    std::copy(dic.begin(), dic.end(), std::ostream_iterator<std::string>(output, "\n"));
    return 0 ;
}
550537:05/01/09 02:06:15
>549さん

やはり、突っ込みどころだらけですか。。 我ながら低レベルなコードだと思います。

逆に、549さんのコードは ハイレベル過ぎて今一わからない部分があります。
たくさんIncludeされてますが、半分ほど 初めてみるようなLibraryです。

my_compを別ファイルに移すというのは、具体的にどのようにするのでしょうか?

my_comp.cpp と my_comp.h を作って、my_compの実行コードを my_comp.cppに
移して、my_comp.hにSpecificationを書いて、 mainのあるファイル内でinclude <my_comp.h>
すればよいということでしょうか?
551デフォルトの名無しさん:05/01/09 02:20:28
円周率πの値を計算するモンテカルロシミュレーションのプログラムが分かる
人是非教えてください。お願いします。
552537:05/01/09 02:25:35
もしよければ 私のコードのどこら辺がおかしいか 大まかにでも教えて
頂けませんか? なるべく理解して 修正していきたいので よろしく御願いします。。

私の考え的には、
1.テキストファイルから単語を読んで、string list[100]に保存していく。(最高100単語)
2.保存していく際に、以下の方法で 辞書順に並び替えながら保存していく。
3.まず単語をstring wordに保存し、wordをlist[n] (最初はn=0) と見比べる。この時、外部Methodを呼ぶ。
4.外部Methodはパラメーターに渡された二つのstringを比べて、Booleanを返す。
5.外部Methodは二つのstringが同じ場合、もしくは比べる単語が、比べられる単語より辞書順で前に来る場合、Falseを返す。 比べる単語が、比べられる単語より後に来る場合Trueを返す。
6.mainで、methodの返し値がTrueの場合 wordをlist[n++]と比べる。
  methodの返し値がFalseの場合 wordをlist[n]とスワップしてから、n++して、3に戻る。
7.最終的に、wordはlist内の一番最後のword (空白)とスワップされる。よって、wordが空白に
なった時に このループを終える。
8.list内のデータをファイルに出力する。

以上の事が、私がやりたかった事です。やりたい事がわかっているのに、コードにできないのはとても
歯痒いですね。。多分 以上のアルゴリズムは全くもって低レベルなのでしょうけど。。
553デフォルトの名無しさん:05/01/09 02:26:43
554デフォルトの名無しさん:05/01/09 02:28:23
std::vector, list 等につっこんで sort
これでよけいなことは考えなくてすむ
555551:05/01/09 02:32:22
>>553
C++を使ったプログラムがわからないのです…
556デフォルトの名無しさん:05/01/09 02:35:31
>>551
てきとー
#include <iostream>
#include <cstdlib>
#include <ctime>
#define N 100000
using namespace std;
int main()
{
 int cnt=0;
 double x,y;
 srand((unsigned int)time(0));
 for (int i=0; i<N; i++) {
  x = (double)rand() / RAND_MAX;
  y = (double)rand() / RAND_MAX;
  if ((x*x + y*y) <= 1)
   cnt++;
 }
 cout << "π=" << (double)cnt/N*4 << endl;
}
557デフォルトの名無しさん:05/01/09 03:22:10
>>552
ちょっと待ってなさい
558537:05/01/09 03:31:50
>557さん

ほんと感謝します:D
559デフォルトの名無しさん:05/01/09 03:38:35
メモリモデルについて説明せよ。
560548=549=557:05/01/09 04:02:13
>>558
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/56.zip
コンパイルは通るが結果がソートされない。つまり、元々ソートのアルゴリズムが
間違っている。そこは自分でやるかい?
561537:05/01/09 04:32:47
>557さん

こんな丁寧に自分のコードを直された事がなかったので 大変嬉しいです。
分かりやすい解説をどうもありがとう。

教えてもらった通りに書き換えてみたのですが、Compileエラーがいくつか出てしまいます。
環境に依存するものでしょうか?(Solarisです)

>g++ -o sorter sorter.cpp と打つと

Undefined first referenced
symbol in file
Compare::Compare(std::string, std::string)/var/tmp/ccLKVSfb.o
Compare::Compare_To_Each_Other() /var/tmp/ccLKVSfb.o
ld: fatal: Symbol referencing errors. No output written to sroter
collect2: ld returned 1 exit status.

とでます。何か心当たりはありませんでしょうか?
取り合えずコンパイルされて どのようにソートされるかを見て、できるだけ自分で
アルゴリズムから考えなおしてみます。
562デフォルトの名無しさん:05/01/09 13:18:36
ねぇねぇCでスロットマシーン作りたいの
563デフォルトの名無しさん:05/01/09 13:19:38
g++ -o sorter sorter.cpp compare.cpp
564デフォルトの名無しさん:05/01/09 13:50:15
>562
'\r'出力とgetch使って試してくんろ
565デフォルトの名無しさん:05/01/09 14:52:57
"1234567〓♂☆★"
♂:1チェリー ♂♂:2チェリー
♂♂♂:3チェリー
〓〓:2バー 〓〓〓:3バー
111〜777:大当たり
☆☆☆:確率変動
★★★:ディスク初期化
566デフォルトの名無しさん:05/01/09 14:59:39
>>565
ワロア
567デフォルトの名無しさん:05/01/09 15:09:29
>>565
ワローデッド
568デフォルトの名無しさん:05/01/09 15:22:48
\r出力で行の先頭に移動できる。
期待得点=(得点×確率)の和。
期待減点=(減点×確率)の和。
期待点=期待得点-期待減点≒0となるように3ドラムを設計。
569デフォルトの名無しさん:05/01/09 15:44:14
#define D_SIZE ドラムの大きさ
char dd[3][D_SIZE][10]={{ドラム1設計},...};
int di[3]={ドラム1の位置,...};
...
printf("%s\r",dd[i][di[i]]);
570デフォルトの名無しさん:05/01/09 15:49:03
sleep関数を使ってアニメ化のための遅延(時間待ち)を行うとよい。ここまでで質問はないか?
571デフォルトの名無しさん:05/01/09 15:51:11
ディスク初期化は何点に相当しますか?
572デフォルトの名無しさん:05/01/09 16:00:06
>571
-666点
573ぼるじょあ ◆yBEncckFOU :05/01/09 16:20:38
sage
574ぼるじょあ ◆yBEncckFOU :05/01/09 16:21:17
ぼるじょあ#ぶるじょあ
575551:05/01/09 17:29:04
このプログラムはある系列(SEEDというグローバル変数)の[0,1]なる擬似一様乱数
を発生し表示するプログラムなんですけど、これを参考にして円周率πの値を計算
するモンテカルロシミュレーションのプログラムが作れません。教えてください。
よろしくお願いします!


#include<iostream>
#include<cstdlib>
#define SEED 100000

int main(int argc, char **argv)
{
unsigned int SEED;
unsigned int MAXNUM;

if(argc != 3){
cerr << "USAGE:uniform SEED MAXNUM\n";
exit(1);
}

SEED = atoi(argv[1]);
MAXNUM = atoi(argv[2]);
srand(SEED);
for(unsigned int i =1; i <= MAXNUM; i++){
double x = (double)rand() / (double)RAND_MAX;
cout << i << '\t' << x << '\n';
}
return(0);
}
576デフォルトの名無しさん:05/01/09 17:32:47
もう解答出てないか?
577デフォルトの名無しさん:05/01/09 17:36:08
>575
なぜ過去スレやGoogleで調べようとしない? 乱数生成ルーチンを関数にしろ。それから、針が乱雑に落ちる場合を図に描き、その図から円周率を含む式を考えろ
578デフォルトの名無しさん:05/01/09 17:39:16
まるち!マルチ!multi!まるち!マルチ!multi!まるち!マルチ!multi!
579デフォルトの名無しさん:05/01/09 17:40:13
過去スレというか…
>>556をちょっと変えるだけでいいんじゃないの?
580デフォルトの名無しさん:05/01/09 17:45:31

_ , '⌒ ⌒\
\\ ノノレノ )))
  (○) |||ノ
  'へ゛゛ーノ   ‖
   (  ̄ ̄ ̄《目
   |  ===《目
   |__|    ‖
   ∠|_|_|_|_ゝ  ‖
    |__|_|     ‖
    | | |     ‖
    |__|__|     ‖
    | \\   皿皿
581551:05/01/09 17:50:57
考えてはみたんですけど分からないのです。本当に教えてください。お願いします。
582デフォルトの名無しさん:05/01/09 17:53:31
556の何が不満なんだ?
583デフォルトの名無しさん:05/01/09 17:59:14
ファイルを読み込んで1行に空白で区切ってある数字があります。
1行に数字が何個あるかは決まってなく、ファイルの終わりまでの
すべての数字を読み込んで総和を出すプログラムなんですが・・・。
もっと簡単になりませんかね?
#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *fp;
char a[256], b[10];
int i,k,sum=0;
fp=fopen("data.txt","r");
while(fgets(a,255,fp)!=NULL){
i=0;
while( a[i]!='\n'){
k=0;
for( ; a[i]!=' '&& a[i]!='\n'&& a[i]!='\0'; i++){
b[k]=a[i]; k++;
}
b[k]='\0';
sum += atoi(b);
for( ;a[i]==' ';i++);
}
}
printf("総和は%d",sum);
fclose(fp);
return 0;
}
584デフォルトの名無しさん:05/01/09 18:07:37
>583
atoiは数字より後の数字以外の文字を無視するから、配列bにコピーするのは無駄
585デフォルトの名無しさん:05/01/09 18:09:11
>>583
C++ならこうなる。
#include <fstream>
#include <iostream>
#include <iterator>
#include <numeric>

int main()
{
    std::ifstream data("data.txt");
    std::cout << std::accumulate(std::istream_iterator<int>(data), std::istream_iterator<int>(), 0) << std::endl;
    return 0;
}
586デフォルトの名無しさん:05/01/09 18:12:26
584>
どこをかえればいいんですか?
587デフォルトの名無しさん:05/01/09 18:30:02
C言語で因子分析のプログラムを作成したいのですが、誰か参考になるプログラムなどありませんか?
588デフォルトの名無しさん:05/01/09 18:36:51
>>583
strtolをうまく使え
589575:05/01/09 18:54:54
誰かわかりませんか?
590デフォルトの名無しさん:05/01/09 18:56:07
釣りはツマンネ
591デフォルトの名無しさん:05/01/09 19:12:50
モロトフカクテル
592585:05/01/09 19:13:11
>>583
自分の求める以外のレスにも何か反応したらどうだい?C限定ならこうなる。
#include <ctype.h>
#include <stdio.h>

int main(void)
{
    FILE *fp;
    int c, num = 0, sum = 0;
    if ((fp = fopen("data.txt", "r")) == NULL) return 1;
    while ((c = getc(fp)) != EOF) {
        if (isdigit(c)) {
            num *= 10;
            num += c - '0';
        }
        else {
            sum += num;
            num = 0;
            while (!isdigit(c = getc(fp)));
            ungetc(c, fp);
        }
    }
    sum += num;
    fclose(fp);
    printf("%d", sum);
    return 0;
}
593デフォルトの名無しさん:05/01/09 20:07:15
>>592
ungetcとか要るの?
#include <ctype.h>
#include <stdio.h>
int main(void)
{
  FILE *fp;
  int ch, n=0, t=0;
  if ( !(fp=fopen("data.txt","r")) ) return 1;
  while( (ch=getc(fp))!=EOF )
    if( isdigit(ch) ) n=n*10+ch-'0'; else t+=n,n=0;
  fclose(fp);
  printf("total:%d", t+n);
  return 0;
}
594デフォルトの名無しさん:05/01/09 20:47:40
583ではないんですけど、
n=n*10+ch-'0'
の-'0'ってなにをしてるんっすか?
595デフォルトの名無しさん:05/01/09 20:53:28
n = '3' - '0'; // n == 3
596デフォルトの名無しさん:05/01/09 20:56:22
>594
'0'からの相対位置。Win+R キーを押した後「charmap」と入力してEnter押してみろ
597デフォルトの名無しさん:05/01/09 20:57:14
Win+Rで出ることを初めて知った…
598デフォルトの名無しさん:05/01/09 21:07:43
>>595-596
おぉなるほど!
ありがとうございましたっm(_ _)m
599434:05/01/09 21:11:56
ブラックジャックを作っています。一連の流れは作り終えたのですが。
一度対戦を終え、もう一度やり直すと、必ず固まってしまいます。

C++Builderを使用しております。
スタートボタンで「カードをシャッフル・コンピュータとプレイヤーにカードを2枚配る・カードの値の判定と表示」
を行っているのですが。一度はきちんと動くんですが、2回目からは固まるのです。
つまり、スタートボタンが2度は押せないのです。
プログラムはおかしくないとは思うのですが。こういった時の原因ってどう発見すれば良いんでしょうか。
600デフォルトの名無しさん:05/01/09 21:13:43
>>599
プログラムがおかしいんです。
現実逃避を止めましょう
601デフォルトの名無しさん:05/01/09 21:16:38
>>562
randでも使ってやってみろ
602434:05/01/09 21:31:02
>>600
そうなのかもしれませんが。一度目はきちんと作動するんです。
二回目からも、不自然な動作をする訳じゃなく、ただ固まるだけなので。
それで困ってるんです。
603575:05/01/09 21:33:21
考えても分かりません。誰か教えてくれませんか!!
604デフォルトの名無しさん:05/01/09 21:38:05
>603
どこで分からないか説明できないのなら、きっぱりあきらめなさい。
605デフォルトの名無しさん:05/01/09 21:43:51
>>599
・サンプルなりチュートリアルなりを参考にしているならそれらをよく読む。
・コードを晒す。
ま、どっちかかな。
606575:05/01/09 21:49:42
申し訳ないんですけどプログラム作ってもらえませんか。
607デフォルトの名無しさん:05/01/09 22:18:47
まるち〜
608デフォルトの名無しさん:05/01/09 22:53:18
>>606
自分で作れチンカス
609575:05/01/09 23:13:32
分からないから頼んでるんですよ。お願いします!
610575:05/01/09 23:15:18
分からないから頼んでるんですよ。お願いします!
611575:05/01/09 23:52:53
早く俺の宿題やれチンカスども!もう眠いから寝るが、明日の昼までにやっとけ
612デフォルトの名無しさん:05/01/09 23:55:29
>599

1度目→2度目の時にやっておかなければならない初期化等の漏れ
613デフォルトの名無しさん:05/01/10 02:11:31
正直ここの住人は尊敬するよ。
614デフォルトの名無しさん:05/01/10 03:31:52
正直hereのinhabitantはrespectするよ。
615デフォルトの名無しさん:05/01/10 03:39:44
ポーカーでカード配るのは出来るんですが、いらないカードを交換する部分が上手くいきません
616デフォルトの名無しさん:05/01/10 03:44:52
>>615
独り言なら他の板でやってくれないかな
617537:05/01/10 04:55:53
537です。

549さんのコードを理解しようとしているのですが、最後から3つ目と2つ目の行の
sortとcopyは、Iteratorというライブラリに収容されているMethodでしょうか?
調べてみた所、random_iteratorやら、reserve_iteratorやらと 色々なiteratorがあるようですが、
549さんのコードには、iterator のみがincludeされていますよね。これ一つで、全種類の
iteratorが使えるようになるのでしょうか?
やっていることは分かるのですが、将来も使えるMethodなら使いたいので 教えてください。

後、もう一つだけ教えてください。
多分、ファイルのリンクが上手く行っていないとおもうのですが、549さんのコードでいう
my_comp、(私は自分で、compare.cpp compare.hという二つのファイルに、ちょっと違うコードを
書いてみました)なのですが、 Typeを別クラスに収納するやりかたは ぼんやりですが分かっている
のですが ファンクションのみというのは、どのようにするのでしょうか?やってみたのですが、
二つだけ、コンパイルエラーがでてしまいます。。
以下に、549さんのコードをヒントに書いてみたコードのリンクを張っておきますので、時間があるときに
目を通していただいて、間違っている所を指摘していただければ幸いです。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/58.zip

宜しく御願いします。
618デフォルトの名無しさん:05/01/10 05:15:03
プログラム はじめたばかりの大学生ですが
・授業単元:配列?
・環境
・ OS: win XP
・コンパイラ(バージョン):bcpad
・言語:C++
・期限:1989年1月10日:   今日中だとうれしいです
よろしくお願いいたします。
3問課題が出題されたのですが、後の2問がりかいできませんでした。
申し訳ありませんが協力おねがいします。

@
#include <stdio.h>
void main(void)
{
int a[ ]={ 65,82,47,98,100,83,71,39,54,26};
int b[10],i;
for(i=0;i<=9;i++){
b[i]=a[i];
}
for(i=0;i<=9;i++){
printf(“a[%d]=%d b[%d]=%d\n”,i,a[i],i,b[i]);
}
}
619618:05/01/10 05:21:31
A
 @の配列 aの要素値を多きい順に並び替えるプログラム。
B
 @の配列 aの要素値の最大値と最小値を求め、表示するプログラムを作成。

以上の2問です。  すいませんが頼らせていただきます。よろしくお願いします。
620デフォルトの名無しさん:05/01/10 05:25:26
>・期限:1989年1月10日:   今日中だとうれしいです

?????
621デフォルトの名無しさん:05/01/10 05:28:40
A
#include <iostream>
#include <iterator>
#include <algorithm>
#include <functional>

template <class T, std::size_t N>
inline std::size_t numOf(const T (&)[N])
{ return N; }

int main()
{
std::sort(&a[0], &a[numOf(a)], std::greater());
}
B
template <class T, std::size_t N>
inline std::size_t numOf(const T (&)[N])
{ return N; }

template <class T, std::size_t N>
inline T min(const T (&t)[N])
{ return *std::min_element(&t[0], &t[N]); }

template <class T, std::size_t N>
inline T max(const T (&t)[N])
{ return *std::max_element(&t[0], &t[N]); }

int main()
{
std::cout << min(a) << ' ' << max(a) << std::endl;
}
漏れの脳内コンパイルは通った
622デフォルトの名無しさん:05/01/10 05:36:37
>>621
2ですけど
missing template arguments before '(' token
って出てしまいます。
623デフォルトの名無しさん:05/01/10 07:59:35
maze[x][y]==KITA;
if(maze[y][x+1] == AKI)座標(x+1,y)をプッシュダウン
if(maze[y+1][x] == AKI)座標(x,y+1)をプッシュダウン
if(maze[y][x-1] == AKI)座標(x-1,y)をプッシュダウン
if(maze[y-1][x] == AKI)座標(x,y-1)をプッシュダウン
スタックを使った迷路なんですが、これはfindgoal()という関数の中の
一文です。1つの座標に一方向ではなく、四方向を検索してすべての
迷路の経路と距離を再帰関数を使わずに求めるにはどうしたらいいでしょう?
スタックでは、x,y座標以外に検索方向dを加えています。まだ検索してない座標

は(x,y,d)をスタックにプッシュダウンします。dが0なら右,1なら下,2なら左,3
なら上,4なら終了という意味にしています。
624デフォルトの名無しさん:05/01/10 08:03:38
>>617
sortとcopyは<algorithm>内に収められている。
<iterator>はistream_iterator/ostream_iterator用。
iterator自体はコンテナのヘッダや<string>をインクルードすれば使える。
625デフォルトの名無しさん:05/01/10 08:09:16
>>623
関数findgoal()の書き換えで求めるんですが、
プログラム文が短くてわかりづらかったらご指摘ください。
よろしくお願いします。
626618:05/01/10 09:05:42
>>620
弟の誕生日入れてまいました。すいません


>>621,622
朝からありがとうございます。        
627デフォルトの名無しさん:05/01/10 09:16:48
1989というと俺と同級か
628デフォルトの名無しさん:05/01/10 10:07:59
>>627
若いねー。俺なんて1978だよ。もうオッサン腹だよ。
このスレの住人ってどのくらいの年齢層なんだろうね。
まぁ宿題持ってくる奴は18〜22が平均なのだろうが。
629デフォルトの名無しさん:05/01/10 10:57:50
>>627
俺とも同級だw
630デフォルトの名無しさん:05/01/10 11:10:16
>>627,629
タメ多いね
自分も同級だよ

>>628
ちなみに解答Only
631デフォルトの名無しさん:05/01/10 11:19:51
>>628
藻前様よりもずっと年上だよ。でも未だに二十歳のときの体型維持しているがね。
632デフォルトの名無しさん:05/01/10 11:32:34
[1] 授業単元:
[2] 問題文(含コード&リンク):HTTPクライアントとサーバの作成

クライアントの動作

1 起動後、
2 標準入力からURL (http: で始まるものだけ) を入力し、 その情報をもとにサーバにTCPで接続し、 上記プロトコル(HTTP 1.1 のサブセット)に従い、
コンテンツ (message-body) の転送要求を行い、 結果を画面に表示する。 (サーバのポート番号は URL の中で指定できるようにすること)
3 2. の動作を繰り返す。

サーバの動作

1 引数は TCPのポート番号とする
2 起動後、
3 クライアントからのコネクション待ちに入る。
4 クライアントのコネクション確立後、 クライアントからのコンテンツ転送要求に応じてコンテンツを転送する。
5 2. の状態に戻る。

詳細はこちらに http://www.kuis.kyoto-u.ac.jp/isle/le2/http.html


[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ(バージョン):gcc バージョンはわかりません
 [3.3] 言語:C
[4] 期限:なるべく早く
[5] その他の制限:


よろしくお願いします。
633デフォルトの名無しさん:05/01/10 11:38:40
勢いでスロットを作ってしまった。いm(ry

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/57.txt
634デフォルトの名無しさん:05/01/10 12:50:21
>633
新入りにしてはまずまずの出来だな。kbhitを使えばキー押しチェックできる。infoseekは直リンク封じてたので、別リンクあげ。
57.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=32
635デフォルトの名無しさん:05/01/10 12:56:35
>634
残念。infoseekのCGIには直リンク不能と思われ。
636デフォルトの名無しさん:05/01/10 12:58:51
[2]ニュートンラプソン法を用いて方程式を解く問題で
fatal error C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
というエラーがでて解決法がわかりません。
 [3.1] OS:win XP
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C++
[4] 1/10中でお願いします
637デフォルトの名無しさん:05/01/10 12:59:23
書いたプログラムは
#include <stdio.h>
#include <math.h>
main()
{
const float eps = 1.0e-14
float x0,x1;
float f(float x);
float fd(float x);
x1=1;
do
{
x0 = x1;
x1 = x0-f(x0)/fd(x0);
}
while (fabs(x1-x0) > eps);
printf("x = %g\n" ,x1);
}
float f(float x)
{
return (x*x-3*cos(x)+sin(x));
}
float fd(float x)
{
return (2*x+3*sin(x)+cos(x));
}
638デフォルトの名無しさん:05/01/10 13:30:56
>>637
const float eps = 1.0e-14
にセミコロンがありませんよ。
>>fatal error C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
って事はVC使ってるかな?
プロジェクトの設定見直した方がいいかも。g++では通りましたよ。
639デフォルトの名無しさん:05/01/10 13:39:35
はいVCです。設定ですか?
さっぱりわかりません(TT)
640デフォルトの名無しさん:05/01/10 13:43:41
コンソールアプリケーションだよね。
プロパティー→C/C++→プリコンパイルの
プリコンパイル済みヘッダーの作成/使用を「使用しないに」。
641デフォルトの名無しさん:05/01/10 13:53:29
教えていただいて申し訳ないですが見つからないです。
642デフォルトの名無しさん:05/01/10 13:58:10
うーむ。バージョンが違うのかなぁ。
どっかに、プリコンパイル済みヘッダーの作成/使用に関する設定がないかなぁ
643デフォルトの名無しさん:05/01/10 14:02:39
いっそプロジェクト作りなおすとか
644デフォルトの名無しさん:05/01/10 14:03:46
2003使ってるんですが
ツール→オプション→エディットコンティニュ
にプリコンパイルを許可するって欄があってチェック外したのですが
変化なしです
645デフォルトの名無しさん:05/01/10 14:05:51
あれ、2003だったら、プロジェクト→(プロジェクト名)のプロパティに例の項目無い?
646デフォルトの名無しさん:05/01/10 14:09:56
は!ありました。どうもご迷惑おかけしました。
無事ビルドできましたありがとうございます!!
647デフォルトの名無しさん:05/01/10 14:54:49
>>637
のプログラム書いた者なんですがこのプログラムって
あってるんでしょうか?
648デフォルトの名無しさん:05/01/10 14:55:37
ニュートン法?
649デフォルトの名無しさん:05/01/10 14:59:59
はい。度々申し訳ないですが解答が
x=0.9〜ってのはおかしいと
650デフォルトの名無しさん:05/01/10 15:12:07
このスレの宿題って「C言語による最新アルゴリズム辞典」のコピペで解決するやつ多くないか?
高校ならともかく大学でこの本を置いてないってことは考えにくいからとりあえずテンプレに書いておくのはどうよ。
http://www.amazon.co.jp/exec/obidos/ASIN/4874084141/249-0080744-2490736

正誤表とソースコード
http://oku.edu.mie-u.ac.jp/~okumura/algo/
651デフォルトの名無しさん:05/01/10 15:19:03
というかその本からのコピペでやっても
0.955909…になるなぁ
変なところで収束してるんじゃなかろか
652デフォルトの名無しさん:05/01/10 15:22:31
根本的にCをわかってないのも多いから、奥村先生の本読んでも
コードのどこをどう使えばいいのか分からないだろうから、意味がない
653デフォルトの名無しさん:05/01/10 15:23:23
方程式にムリがあるんですかね?
654デフォルトの名無しさん:05/01/10 15:27:58
初期値に無理があるんだろ。ニュートン法は解が複数ある方程式の場合は
どこに収束するかは初期値次第だからな。
655デフォルトの名無しさん:05/01/10 15:29:05
解は-1.314485609と0.9559087985ですね。
原因は>>654が正しいかと
656デフォルトの名無しさん:05/01/10 15:30:25
>>655
その解の値を元の方程式につっこんでも0にならないのはなんででしょ?
657デフォルトの名無しさん:05/01/10 15:31:08
>>656
(ほぼ)0になるよ。
勿論誤差はあるけど。
658デフォルトの名無しさん:05/01/10 15:34:26
Mathematicaで吐かせたら解けない言われてもた(;´Д`)
>>657
ああ…指数表現に惑わされてました。確かにほぼ0ですね。スンマソン

659デフォルトの名無しさん:05/01/10 15:36:48
みなさんありがとうございました。
660デフォルトの名無しさん:05/01/10 15:41:52
初期値を-.200805にすると面白いと思うよ。
#経過を表示してないと判らないと思うけど。
661デフォルトの名無しさん:05/01/10 15:47:38
いきなり-154に跳ね上がるのね
662デフォルトの名無しさん:05/01/10 15:52:04
>>661
導関数値が0に近いからね。
663デフォルトの名無しさん:05/01/10 19:46:29
 XYZ
-)ZYX
───

の条件を満たす数 X Y Z を求め、
表示するプログラムを作成しなさいという宿題がでたのですが
どのように書けばよいのでしょうか?
664デフォルトの名無しさん:05/01/10 19:49:20
XYZ - ZYXがどうなるのが条件なんだ?
665デフォルトの名無しさん:05/01/10 19:49:40
>663
条件式中の引き算の結果は?
666デフォルトの名無しさん:05/01/10 19:50:49
>>663
その条件わかんね

>>664-666
の怒涛の突っ込み
667デフォルトの名無しさん:05/01/10 19:56:27
出題ミスかも?
出題者に条件を聞いてみたら?
668デフォルトの名無しさん:05/01/10 20:04:40
>1-1001
自己解決しました。有難うございました
669デフォルトの名無しさん:05/01/10 20:11:23
>>668
藻前>>663
670デフォルトの名無しさん:05/01/10 20:15:33
ネタなのかな〜・・・・OTZ
671663:05/01/10 20:19:47
すいませんかきわすれてました・・・

 XYZ
-)ZYX
───
 1XY
です。よろしくお願いいたします。
672デフォルトの名無しさん:05/01/10 20:25:10
>663
総当りで調べるが良い
すなわち
for(x=1; x<=9; ++x){
for(y=0; y<=9; ++y){
for(z=1; z<=9; ++z){
if(z*100+y*10+z-(z*100+y*10+x)==100+x*10+y){ // ここで表示! }
}
}
}

※3桁の先頭が0にならないと考えた、一応
673デフォルトの名無しさん:05/01/10 20:26:41
x,y,zを0〜9の数として三重forループで生成した後、条件に合うものを使えば良い
674デフォルトの名無しさん:05/01/10 20:35:02
>>663
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/59.txt
>>672
条件ちょっとミスってるから^^;
675デフォルトの名無しさん:05/01/10 20:45:39
>674
infoseek直接リンクダメだって
676デフォルトの名無しさん:05/01/10 21:31:08
どうせなら一重ループでやれや
677デフォルトの名無しさん:05/01/10 21:46:16
[1] 授業単元:
[2] 問題文(含コード&リンク): AKSアルゴリズムによる素数判定時間の表示
 希望動作 
 1.桁数nを入力
 2.指定桁数内で乱数a生成(10^(n-1)〜10^n -1の間)
 3.乱数aが素数(prime)か合成数(composite)かを判定
 4.乱数aの素数判定の処理時間をだす(乱数生成時間は含まない)
 5.乱数aと素数判定結果(素数か否か)と処理時間をファイル出力or表示
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ(バージョン): Borland C++(Ver5.5.1)
 [3.3] 言語:C/C++/どちらでも可(なるべくCで)
[4] 期限:05年1月17日くらい(なるべく早めに)
[5] その他の制限:
  AKSアルゴリズムを使った素数判定でお願いします
  AKSアルゴリズムの内容(日本語) ttp://www.h4.dion.ne.jp/~a00/ms_project_jp.html

よろしくお願いします。
678デフォルトの名無しさん:05/01/10 21:54:10
>>675
スレイプニルだったらOK
679デフォルトの名無しさん:05/01/10 21:54:46
OperaもOK
680デフォルトの名無しさん:05/01/10 21:59:32
へ〜 AKSアルゴリズム知らなかったけど面白そうだね
681663:05/01/10 22:02:55
>>674

ありがとうございました。これで冬休みの課題終了しました!!
ここの住人本当に感謝します!!
682デフォルトの名無しさん:05/01/10 22:06:51
>>676
main(){
int x;
for( x=100; x<1000; x++ )
if( (x-x/100)%10*99==100+x%10*10+x/10%10 )
printf("x:%d y:%d z:%d\n",x%10,x*10%10,x*100%10);
}
これで満足か
683デフォルトの名無しさん:05/01/10 22:07:16
printf("x:%d y:%d z:%d\n",x%10,x/10%10,x/100%10);
684デフォルトの名無しさん:05/01/10 22:30:05
AKSのオーダーは?
685デフォルトの名無しさん:05/01/10 22:32:41
XYZ % 10 = Z
XYZ * 10 % 10 = 0
XYZ * 100 % 10 = 0
686デフォルトの名無しさん:05/01/10 22:41:42
>>682
そういう意地悪すんなや。
バックトラックとか、スマートなやりかたがあるだろ。
687デフォルトの名無しさん:05/01/10 22:44:05
>>686
お前が書け
688デフォルトの名無しさん:05/01/10 22:57:45
AKSアルゴリズムだけでかなりの量になるわけだが・・・
689デフォルトの名無しさん:05/01/10 23:04:12
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    int a = 0;
    double n, hoge, piyo;

    printf("桁数入力-->");
    scanf("%lf", &n);

    srand(time(NULL));
    hoge = pow(10.0, n);
    piyo = pow(10.0, n-1);

    while(a < (int)piyo) {
        a = rand() % (int)hoge;
    }

    return 0;
}

AKSアルゴを実装してから持って来てくれ。
俺にはよく理解できなかった。
とりあえず、1・2だけ。
690デフォルトの名無しさん:05/01/10 23:11:45
16X16の行列の積を出来るだけ速く、省メモリに計算する関数を作って下さい。
言語はCです。OSに依存するコードは駄目です。コンパイラは何でも構いません。
100行以内でお願いします。

C=A * B
matmul(double *A,double *B,double *C){
}
691677:05/01/10 23:13:20
AKSアルゴリズムのC++のサンプルコードらしきものを見つけたのですが
コンパイルしようとすると私の環境ではエラーをはいてしまいます
もし参考になるのであれば幸いです
サイトの下のほうにあります
 ttp://www.tcs.hut.fi/~helger/crypto/link/primality_tests/aks.html

あとオーダーというのはどういう意味でしょうか?
質問を質問で返してしまい申し訳ありません
692デフォルトの名無しさん:05/01/10 23:39:32
>>691
ソース見たけど、長いねぇ(400行ぐらいかな)。
アップするにしても、あぷろだになるね。

まぁ、別の人に頼んで。(←ヘタレ)
693デフォルトの名無しさん:05/01/10 23:48:26
本当はもっと短く書けますが…
694デフォルトの名無しさん:05/01/10 23:49:18
>>693
じゃあ書いちくり
695677:05/01/11 00:02:03
動作不明ですがAKSアルゴリズムをCで書いたと思われる
ソースがありましたのであぷろだにあげてみました
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/60.txt
696デフォルトの名無しさん:05/01/11 00:14:52
>>691
オーダーくらいぐぐれ
697デフォルトの名無しさん:05/01/11 00:19:24
>>691
f(n)がO(g(n))である ⇔ lim[n→∞](f(n)/g(n))≦c
698デフォルトの名無しさん:05/01/11 00:34:14
C言語におけるpgm形式の画像処理の宿題です。(配列を使って。

ttp://robotics.me.es.osaka-u.ac.jp/~masutani/Jouki2001/Kadai/kadai3.html

に載ってる波紋や回転を参考に作ってみたのですが、まったくうまくいきません。
どなたか、配列への代入のソースを作ってはいただけないでしょうか?よろしくお願いします。
699677:05/01/11 00:52:55
オーダーについてなんとなく理解できてきました
 f(n)=O(log^10.5 n) もしくは f(n)=O(log^12 n)
でお願いします。 表記等が間違っていたらすいません。
700デフォルトの名無しさん:05/01/11 00:54:47
はて、何をお願いされたのか
701デフォルトの名無しさん:05/01/11 00:57:03
>>699
オーダーはプログラムを書くときには関係ない。
702デフォルトの名無しさん:05/01/11 00:59:15
ttp://jp.thespoke.net/MessageBoard/MessageBoard_ViewThread.aspx?postid=486

あの似顔絵ウィザードも含めて、HomeStyle+ って
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.NET Framework で書かれてるんですね。。。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
逆アセンブルしてみたら気づきました・・・・。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ああいうのを作品に組み込むのも面白いかも(笑)

MSの製品を逆汗するような奴をMSはMVPに選んでいるんです。MSは逆汗を認めていると
703デフォルトの名無しさん:05/01/11 01:09:28
>>698
pgm画像データの配列への代入?
xv/ImageMagick/libpgm/libpnm辺りのソースを探そう。
704デフォルトの名無しさん:05/01/11 02:33:17
すみません。レポートの問題が全然分からないのでどうか皆様のお力を貸して下さい。

自分は機会工学科の学生でCAD/CAMの授業を受けていたのですが、3回目のレポートにして
プログラムの問題が出題されて苦悩しています。
これまでの課題は機械的な問題だったので解けたもののプログラムはチンプンカンプンで、
これまでの不勉強を悔やむばかりです。

こんな深夜に大変あつかましいお願いですが、どうぞよろしくお願いします。

[1] 授業単元: CAD/CAM
[2] 問題文: 以下の関数を使ってどうやって三角錐の体積を求めているか説明せよ。
  ベクトルを使った体積計算  1/6a ( b×c ) (a,b,cはベクトル)  が基本になっている
  というのがヒントでした。

[4] 期限:2005年1月11日14:00まで 今日ですね…
705704 続きです。:05/01/11 02:33:59
double svolume(s)
solid *s;
{
Face *f;
Loop *l;
HalfEdge *he1, *he2;
vector c;
double res:

res = 0 . 0;
f = s-> sfaces;
while (f)
{
l = f -> floops;
while (l)
{
he1 = l -> ledg;
he2 = he1 -> nxt;
do
{
cross (c, he1 -> vtx -> vcoord,
he2 -> vtx -> vcoord);
res += dot (he2 -> ntx -> vtx -> vcoord, c);
}
while ( (he2 = he2 -> nxt) !=he1);
l = l -> nextl;
}
f = f -> nextf;
}
return (res / 6.0);
}
706デフォルトの名無しさん:05/01/11 04:50:00
文系の学生です
般教で情報処理を取ってC言語の宿題が出たんですがさっぱらわかりません
問題は
@一つ126円のハンバーガーと一杯105円のコーヒーをそれぞれいくつかづつ購入し
1000円で支払った場合のおつりを計算して画面に表示しなさい
A二つの数値を入力しその2数の積が20の倍数かどうかを判断するプログラムを作りなさい
B数値を入力しその回数だけ自分の名前を画面に表示するプログラムを作りなさい

親切な方教えてください
707デフォルトの名無しさん:05/01/11 05:21:20
「文系」なんてわざわざ断るような香具師に教える気はさらさらない。
つーか、文系と宣言するくらいならまともな日本語を書け。
そもそも情報処理を取っててなんで「さっぱら」判らないんだ?
708デフォルトの名無しさん:05/01/11 05:41:30
>>706
(1)
#include <stdio.h>
int main(void)
{
int a, b;
printf("ハンバーガーの個数: ");
scanf("%d", &a);
printf("コーヒーの個数: ");
scanf("%d", &b);
printf("おつり: %d\n", 1000 - 126 * a - 105 * b);
return 0;
}
709デフォルトの名無しさん:05/01/11 05:44:10
>>706
(2)
#include <stdio.h>
int main(void)
{
int a, b;
scanf("%d", &a);
scanf("%d", &b);
if (a * b % 20 == 0) { printf("20の倍数\n"); }
else { printf("20の倍数ではない\n"); }
return 0;
}
710デフォルトの名無しさん:05/01/11 05:45:50
>>706
(3)
#include <stdio.h>
int main(void)
{
int i, n;
scanf("%d", &n);
for (i = 0; i < n; i++) { printf("自分の名前\n"); }
return 0;
}
711デフォルトの名無しさん:05/01/11 06:40:31
問題文: 山くずしゲーム.
コンピュータ側が任意の自然数を乱数として設定し(これを石の数とする)、
対局者とコンピュータとで交互に1個ないし2個の石を取り続ける。
最後の石をとったほうが勝ち。
このゲームでコンピュータ側が最強になるようなアルゴリズムを作れ。
なおコンピュータ側から
“石の残り××個です。何個取りますか?”
“石の残り××個です。私は×個とります。”
などのメッセージを表示しながら、決着がつくまで進めること。
(ヒントとして石の数が3の倍数になるようにして残して対局者に
渡すことが出来れば、必ずコンピュータ側が最後の石を取ることが出来る。
3の倍数に出来ないなら、仕方なくコンピュータ側は1個でも取って相手に渡し、
相手が失敗するのを待つしかない)
とありました…


[3]言語:C言語
[4]期限:2005年1月11日19:00まで

よろしくお願いします…
712デフォルトの名無しさん:05/01/11 06:58:02
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
PGMの画像ファイルを、判別分析法で求めた閾値で2値化するプログラムを作れ。

http://www.page.sannet.ne.jp/ikenoue/type2/lena/lena.html 
にC++でつくってあるソースがあります。これをC言語に書き直してくれてもいいです。

[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ(バージョン): Cygwin
 [3.3] 言語:C/C++/どちらでも可 のいずれか :C
[4] [4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか 2005年01月13日19:00
[5] その他の制限:

http://www007.upp.so-net.ne.jp/coin_locker/ip/ip06.html
にCソースがあるのですが”ファイル情報と画素数が一致しません”というエラー
がでて上手くいきません。

どうかよろしくお願いします。
713デフォルトの名無しさん:05/01/11 07:16:50
>711
これは未知数を使った簡単なパズルのようなものだ。コンピュータ側が最後に勝つように最終局から総当たりで現在の状態になるような手順を場合分けの木を使ってじっくり考えたまえ
714デフォルトの名無しさん:05/01/11 07:38:47
>711
例えばコンピュータの番の時、4個残っていたら、どうするか。この場合、コンピュータには必勝法がある
715デフォルトの名無しさん:05/01/11 07:42:39
>>711
#include <stdio.h>
#include <stdlib.h>
const char *person(int *pnstone) {
  int n = 0;
  char s[8];
  do {
    fprintf(stderr, "%d: ", *pnstone);
    fgets(s, sizeof(s), stdin);
    n = atoi(s);
  } while ((n != 1 && n != 2) || *pnstone < n);
  *pnstone -= n;
  return "";
}
const char *computer(int *pnstone) {
  static int result_array[] = {1, 1, 2};
  *pnstone -= result_array[*pnstone % 3];
  return "";
}
716715:05/01/11 07:43:17
int judge(int *pnstone, const char *(*func)(int *)) {
  int n = *pnstone;
  const char *who = func(pnstone);
  if (!*pnstone) {
    fprintf(stderr, "%s\n", who);
    return 0;
  }
  else {
    fprintf(stderr, "%s%d\n", who, n - *pnstone);
    return 1;
  }
}
int main(void) {
  int nstone;
  srand(time(NULL));
  nstone = rand() % 20 + 5;
  while (judge(&nstone, person) && judge(&nstone, computer))
    ;
  return 0;
}

以上、課題提出にはまず使えない(けど動く)コードでしたw
717715:05/01/11 07:46:43
うげ、このXサーバ、日本語の変換してくれないのなorz
じゃあもう一度初めからスマン
#include <stdio.h>
#include <stdlib.h>
const char *person(int *pnstone) {
  int n = 0;
  char s[8];
  do {
    fprintf(stderr, "石は%d個ある。とる石の数を入力しやがれ\
: ", *pnstone);
    fgets(s, sizeof(s), stdin);
    n = atoi(s);
  } while ((n != 1 && n != 2) || *pnstone < n);
  *pnstone -= n;
  return "あなた";
}
const char *computer(int *pnstone) {
  static int result_array[] = {1, 1, 2};
  *pnstone -= result_array[*pnstone % 3];
  return "コンピュータ";
}
718715:05/01/11 07:47:13
int judge(int *pnstone, const char *(*func)(int *)) {
  int n = *pnstone;
  const char *who = func(pnstone);
  if (!*pnstone) {
    fprintf(stderr, "%sの勝ち\n", who);
    return 0;
  }
  else {
    fprintf(stderr, "%sは%d個とりました\n", who, n - *pnsto\
ne);
    return 1;
  }
}
int main(void) {
  int nstone;
  srand(time(NULL));
  nstone = rand() % 20 + 5;
  while (judge(&nstone, person) && judge(&nstone, computer))
    ;
  return 0;
}

…全くネタを張るときには気をつけろとあれだけ
719706:05/01/11 08:08:04
>>708>>709>>710
ありがとうございます
助かりました
720デフォルトの名無しさん:05/01/11 09:55:10
>>703 いえ、質問の仕方が間違っていました。すみません。

波紋や任意の角度における回転のアルゴリズムを教えてください。
ソースを書いていただけるとうれしいです。
721デフォルトの名無しさん:05/01/11 10:25:58
>>720
(ある程度高機能な)画像編集ソフトを持っていたら、カスタムフィルター機能があると思う。
それに適当に値を入れて試してみ。

例えば、
0 0 0
0 1 0
0 0 1
のフィルターなら斜め方向にぼかせる。
他にも
0 0 0
3 0 1
0 0 0
でゴーストっぽいとか。

波紋や回転も要は座標変換を行なえばいい。
つまり、新画像[x, y] = 旧画像[座標変換(x, y)]のイメージ。
#逆でもいいけどその場合、隙間ができないように注意。
直交座標では計算しにくいと言うなら、一回極座標に変換すればいい。
詳しくは画像処理スレで。
#あっちだと私がついていけないけどw
722デフォルトの名無しさん:05/01/11 12:39:19
>>720
アルゴリズムを教えるのと、
ソースを書いて貰うのは違うぞ。
723デフォルトの名無しさん:05/01/11 12:39:25
「標準入力から C 言語のプログラムテキストファイルを読み込み、
使用している関数名を頻度順に並べなさい。
これは宣言文と実際の式のどちらも含みます。
なお、同じ頻度の関数は辞書順に並べなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに
入力した出力を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。
但し、関数名の長さは高々 255 文字と仮定して良い。」

期限:2005年1月11日23:00まで

ネ申 求 む !

724723:05/01/11 12:40:42
実行例
入力
int combination(int n, int m){
if(m==0){return 1;}
else if(n==m){return 1;}
return combination(n-1,m-1)+combination(n-1,m);
}
main(){
int n=5,m=2;
printf("%dC%d = %d\n",n,m,combination(n,m));
}
出力
combination: 4
main: 1
printf: 1
725デフォルトの名無しさん:05/01/11 12:40:53
>>723
sine
726デフォルトの名無しさん:05/01/11 12:42:27
>>725
おまえも同類、必死杉
727デフォルトの名無しさん:05/01/11 13:10:39
[1] 授業単元:情報処理
[2] 問題文:
次のプログラムの実行結果が同じになるようにfor命令を用いて書き換えよ

#include <stdio.h>
main()
{
int i,n,sum=0
printf("6個のデータを入力してください。\n");
i=O
while(i<6){
scanf("%d",&n);
sum=sumth;
i++;
printf("%d個のデータの合計=%d\n",i,sum);
}
[3] 環境:C言語
[4] 期限:2005年1月13日まで

親切な人お願いします。。。
728デフォルトの名無しさん:05/01/11 13:27:52
>>727
#include <stdio.h>
main()
{
int i,n,sum=0
printf("6個のデータを入力してください。\n");
for(i=1;i<=6;i++){
scanf("%d",&n);
sum=sum+n;
}

printf("%d個のデータの合計=%d\n",i,sum);
}
729デフォルトの名無しさん:05/01/11 14:06:05
 1山くずしゲーム。コンピュータ側が任意の自然数を乱数として設定し(これを石の数
とする)。対局者とコンピュータとで交互に1個または2個の石を取り続ける。最後の石
を取った方が勝ち。このゲームでコンピュータ側が最強になるようなアルゴリズムを作り
なさい。
 なお、コンピュータ側から
”石の残り○○個です。何個とりますか?”
”石の残り○○個です。私は○個とります。”
などのメッセージを表示しながら、決着がつくまで進めること。

ヒント)石の数が3の倍数になるように残して対局者に渡すことができれば、必ず
コンピュータ側が最後の石を取ることができる。3の倍数にできないのなら、仕方なく
コンピュータ側は1個でも取って相手に渡し、相手が失敗するのを待つしかない。

お願いしますm(_ _)m
730デフォルトの名無しさん:05/01/11 14:15:00
>>721 >>722
すみませんでした。波紋、回転、ゴーストを起こすソースを書いていただけ無いでしょうか?
731デフォルトの名無しさん:05/01/11 14:41:18
>>712
上のサイトのを使うなら
stdlib.hをインクルードして
unsigned char (*Gray)[X_SIZE] = new unsigned char[Y_SIZE][X_SIZE]; を
unsigned char (*Gray)[X_SIZE] = malloc(Y_SIZE*X_SIZE);

delete [] Gray; を
free(Gray);
にするだけ
732デフォルトの名無しさん:05/01/11 15:02:18
>729
3で割ったときの余りに着目して、
m=3n, m=3n+1, ないしm=3n+2
と場合分けして考えろ。
733デフォルトの名無しさん:05/01/11 15:24:14
>>729
こういうので最強のアルゴリズム作っても面白くないよな
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// [s,e]の範囲の整数を入力
int getn(int s,int e)
{
int n;
do{scanf("%d",&n);}while(s>n||n>e);
return n;
}
int main()
{
int n,m,player;
srand(time(NULL));
n=(rand()&0x1F)+3;// 3〜34個
printf("石の数は%d個\n",n);
printf("先手を決めてください(コンピュータ:0 / あなた:1)\n");
player=getn(0,1);
for(;;){
printf("石の残り%d個です。",n);
if(player){printf("何個とりますか?>");m=getn(1,n>=2?2:1);}else{m=(n%3)?n%3:1;printf("私は%d個とります。\n",m);}
n-=m;
if(n==0)break;
player=1-player;
}
printf("%sの勝ちです\n",player?"あなた":"コンピュータ");
return 0;
}
734デフォルトの名無しさん:05/01/11 15:41:11
[1] 授業単元:「50音が出るプログラム」
[2] 問題文(含コード&リンク):以下のプログラムでは「あ」から「お」までは出るのですが、「ka」のような2文字以上ではエラーが出てしまいます。
どのように記述すれば、2文字(出来れば3文字)処理できるようになるかご教授ください。
input01.txtは、「aka」と記述してます。kとaを別々の文字として判断されているのでエラーが出ます。

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

 [3.1] OS: xp
 [3.2] コンパイラ(バージョン): MS VC++7.1
 [3.3] 言語:C++
[4] 期限:2005年01月末日まで
735デフォルトの名無しさん:05/01/11 16:09:42
>>734
struct{
char roma[4];// ローマ字
char roma_len;// ローマ字の長さ
char kanji[5];// ひらがな
}aiu[]={
{"\0",1,""}
{"a",1,"あ"},{"i",1,"い"},{"u",1,"う"},{"e",1,"え"},{"o",1,"お"},
{"ka",2,"か"},{"ki",2,"き"},{"ku",2,"く"},{"ke",2,"け"},{"ko",2,"こ"},
//   :  以下略
};

ハッシュじゃないから遅いけどこの表で
int roma2kanji(char* buf)
{
for(j=0;j<sizeof(aiu);j++){
if(memcmp(buf,aiu[j].roma,aiu[j].len)==0){
return aiu[j].len;
}
return 0;
}

呼び出し側
for(i=0;i<len;){
r=roma2kanji(&buf[i]);
if(r==0){
printf(error);
break;
}
i+=r;
}
736デフォルトの名無しさん:05/01/11 16:20:07
なにやってんだ俺は…エロ画像の見すぎだ
int roma2kanji(char* buf)
{
int i;
char name[256];
for(i=0;i<sizeof(aiu);i++){
if(memcmp(buf,aiu[i].roma,aiu[i].roma_len)==0){
printf(aiu[i]);
sprintf(name,"%s.wav",aiu[i].roma);
PlaySound("a.wav", NULL, SND_FILENAME | SND_SYNC);
return aiu[i].roma_len;
}
737デフォルトの名無しさん:05/01/11 16:23:57
738デフォルトの名無しさん:05/01/11 16:34:05
>735
IMEのヘルプにローマ字表がある。別の方法として母音と子音の関係でまとめると
{...,{"じゃ","じぃ","じゅ","じぇ","じょ"},...}
{...,{"jy",1},{"zh",1},...}
置換後の文字列長は埋め込んだ方が速そう。
739デフォルトの名無しさん:05/01/11 16:43:44
>738
何言ってるんだ。オレだったらswitchの中で出力文字列と長さを代入するぜ。
740737:05/01/11 16:45:09
741デフォルトの名無しさん:05/01/11 16:48:23
>>734
どうみてもC++とは思えないからC風にした。かなり手抜き
#include <windows.h>
#include <cstdio>
#include <cstring>
#include <clocale>
using namespace std;

wchar_t KanaTable[][5] = {
    {L"あいうえお"},
    {L"かきくけこ"},
    {L"さしすせそ"},
    {L"たちつてと"},
    {L"なにぬねの"},
    {L"はひふへほ"},
    {L"まみむめも"},
    {L"や ゆ よ"},
    {L"らりるれろ"},
    {L"わゐ ゑを"},
};

const int BUF_LEN = 256;
742デフォルトの名無しさん:05/01/11 16:49:05
int main(void) {
    FILE *fp = fopen("input01.txt", "r");
    char buf[BUF_LEN];
    if (fp) {
        setlocale(LC_ALL, "jpn");
        while (fgets(buf, BUF_LEN, fp)) {
            int i;
            int len = strlen(buf) - 1;
            for (i = 0; i < len; i++) {
                const char *Shiin = "kstnhmyrw";
                const char *Boin = "aiueo";
                int offset;
                char FileName[7], *pFileName = FileName;
                const char *p = strchr(Shiin, buf[i]);
                if (p) {
                    *pFileName++ = buf[i++];
                    offset = p - Shiin + 1;
                } else {
                    offset = 0;
                }
743デフォルトの名無しさん:05/01/11 16:49:28
                p = strchr(Boin, buf[i]);
                if (p) {
                    *pFileName++ = *p;
                    strcpy(pFileName, ".wav");
                    putwchar(KanaTable[offset][p - Boin]);
                    PlaySound(FileName, NULL, SND_FILENAME | SND_SYNC);
                } else {
                    puts("error");
                }
            }
            putchar('\n');
        }
        if (ferror(fp))
            puts("file read error");
        fclose(fp);
        return 0;
    } else {
        puts("file open error");
        return 1;
    }
}
744デフォルトの名無しさん:05/01/11 17:02:31
なお、漢字を含む文章をローマ字表記にしたいなら、KAKASIを参考にするとよい
745734:05/01/11 18:19:58
皆様ありがとうございました。
助かりました。
746デフォルトの名無しさん:05/01/11 18:21:33
>>742
「ん」は?
747デフォルトの名無しさん:05/01/11 18:24:39
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
文の中に含まれている単語の個数を返す関数strcnt()を作成せよ。
int strcnt(const char *s1,const char *2);
文字列(文)s1に含まれている文字列(単語)s2の個数を返す。
なお、2つの単語間には空白文字があるとする。
[例]
s1="The theory of computation is a branch of meta-mathematics that
has been developed since the early 1900's.",s2="the"のとき、
strcnt(s1,s2)の値は2である。
[3] 環境
 [3.1] OS: Fedora Core3
 [3.2] コンパイラ(バージョン):gcc?
 [3.3] 言語:C
[4] 期限:2005年1月12日12:00
[5] その他の制限:特になし。
よろしくお願いします。
748デフォルトの名無しさん:05/01/11 18:28:27
大文字小文字はどうすんだ
749747:05/01/11 18:30:40
この問題文からすると、大文字小文字両方ともカウントするみたいです。
750デフォルトの名無しさん:05/01/11 18:35:04
>>746
そこらへんが手抜き
751デフォルトの名無しさん:05/01/11 19:09:45
>>747
strstr()でs2見つけて、後ろに空白あるか確かめれ。
752デフォルトの名無しさん:05/01/11 19:15:15
[1] 授業単元: c言語
[2] 問題文:
螺旋形状のグラフを作成するために必要な数値データを作成するプログラムを作成せよ。

数値データファイル名:output.csv
PAI:3.14159
include:stdio.h,math.h

また、以下の文を使用すること。
for(i=0; i<360; i++){
   r=(double)i*0.1;
   theta = PAI*(double)i/180.0;

   x=r*cos(theta);
   y=r*sin(theta);

   fprintf(fp,"%8.4f,%8.4f\n",x,y);
}
[3] 環境
  言語:C言語
[4] 期限:2005年1月12日まで
よろしくお願いします。
753デフォルトの名無しさん:05/01/11 19:23:23
出題者はPIをPAIと間違えてるし、何で定数M_PIを使わない?
出題者と出題校の実力を疑う(でも就職率は高いんだナァこれが)。
754デフォルトの名無しさん:05/01/11 19:32:03
>>753
M_PIは必ずしもあるとは限らないから使わないが吉。
755デフォルトの名無しさん:05/01/11 19:37:41
[1] 授業単元: c言語
[2] 問題文:
以下の仕様に基づいて,ハッシュ表(連結リスト)から指定された日にちをもつ予定データ(ノード)を表示する関数
void show_plan_day(NODE **tbl, int day);
を定義し,main()関数への必要な記述をおこなって,関数を実行できるプログラムを作成せよ
また,この関数の処理内容を説明せよ.
* 関数名:show_plan_day
* 仮引数NODE **tbl:データを探索するハッシュ表を受け取る.
* 仮引数 int day:探索する日にち(問題1参照).
* 戻り値なし(void型)
* 機能:関数hash()の実引数としてdayを渡して,ハッシュ値を得る.
このハッシュ値に基づいて,ハッシュ表(連結リスト)から,指定されたdayとおなじDayをもつ
すべての予定データ(ノード)を探索し表示する.
連結リストでは時間の昇順に並んでいるため,同一日にち内であれば,先頭ノードから探索して表示するだけで,時間順に表示される.
756デフォルトの名無しさん:05/01/11 19:43:27
>752
三角関数の式は回転を表している。この回転をz軸方向にずらしていくと、らせんになるはず。csvの中身を見てみろ。読めそうな気にならないか?
757デフォルトの名無しさん:05/01/11 19:47:23
>755
できるだけ自分で設計してみろ。
typedef struct _NODE {
何のデータが必要かな?
}NUDE;
758747:05/01/11 20:07:11
>>751
strstr()というのは聞いたことが無い=授業では習っていないので、
出来るだけ使わないほうが良いと思うのですが、
それ以外の方法は無いですかね?
あと、それだと、文の終わりとかに[.]がついている単語はカウントされない
と思うんですけど。
759デフォルトの名無しさん:05/01/11 20:12:53
>>758
アホか。
授業で習っていようがいまいが使って良いに決まっているだろ。
それとも、使ってはいけないという指示でも出ているのか?
760デフォルトの名無しさん:05/01/11 20:13:53
>>758
それなら後ろの文字をispunctかisspaceが真になるかどうかで確かめろ。
761747:05/01/11 20:23:40
>>759
そういう指示は出ていませんが、なるべく、便利技みたいなのは、使わない
やり方というものが知りたかったので。すいません。
その方法でやってみます。

>>760
これはよく使い方が分かりませんが、情報をありがとうございます。
762デフォルトの名無しさん:05/01/11 20:54:29
>>747
strstr()を使わないやり方
int strcnt( const char *s1, const char *s2)
{
int c=0;
const char *p=s1,*q=s2;
for(;;){
if( q==s2+strlen(s2) ) if(*p==' '||*p=='\0') c++;
for( ;*p==' '; p++)
if( *p=='\0' ) break;
for( q=s2; *q&&*p;) if(tolower(*p++)!=tolower(*q++)) break;
}
return c;
}
763デフォルトの名無しさん:05/01/11 20:57:36
>761
最初の文字がないか、ポインタを動かして探…(以下略
764デフォルトの名無しさん:05/01/11 20:59:40
>>762
下から六行目、セミコロンが抜けてるぞ。
765762:05/01/11 21:00:51
これじゃ止まらないね。
for( ;*p==' '; p++);
でした。ごめん
766デフォルトの名無しさん:05/01/11 21:06:25
int strcnt(const char *s1, const char *s2)
{
    const char *p = s2;
    int cnt = 0;
    do{
        printf("%c %c %c\n", *p, *s1, *s2);
        if(*p == '\0' && (*s1 == '\0' || *s1 == ' ')) cnt++;
        if(*s1 != *p){
            while(*s1 != ' ') s1++;
            p = s2;
        }
        else p++;
        s1++;
    }while(*s1 != '\0');
    return cnt;
}

767デフォルトの名無しさん:05/01/11 21:06:57
先に書き込まれてるし、デバッグのprintfつけたままだし


鬱打氏脳
768デフォルトの名無しさん:05/01/11 21:14:52
>>765-766
s1のさらに後ろにアクセスする可能性があります。再提出してください。
769デフォルトの名無しさん:05/01/11 21:16:29
すみません。レポートの問題が全然分からないのでどうか教えて下さい。

[1] 授業単元:情報処理
[2] 問題文(含コード&リンク): オリジナルのプログラミングを作る。内容・プログラムの大小は問わないが、
                 関数・クラス・ポインタの内容を必ず用いること。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):Microsoft Visual C++
 [3.3] 言語:C++
[4] 期限:2005年1月13日17:00まで
770デフォルトの名無しさん:05/01/11 21:18:27
>>768
空白までのスキップに問題有りやね
まぁ先に書いてる人居るからいいや
771デフォルトの名無しさん:05/01/11 21:25:14
>>769
で、何を作りたいんだ?それがなければ作りようがない。
それじゃまるで「PC買ったんだけど何したらいい?」と言っているようなもの。
それから、締め切りがある以上あまり長くなるようなものも作れないから
そこは考慮するように。
772デフォルトの名無しさん:05/01/11 21:27:12
>769
独自の(オリジナルの; original)プログラムを作れって。身の周りでこんなツールがあったらなーと思うヤツを形にしてみろ。
773デフォルトの名無しさん:05/01/11 21:29:03
>>771
いや、ほんとになんでもいいんです。
とりあえず、関数・クラス・ポインタさえ使っていれば、どんなプログラムでもかまわないんで、
なんとかお願いできませんか?
774デフォルトの名無しさん:05/01/11 21:30:39
クラスやポインタ使うなら、内部データが動的に変わるものがよい
775デフォルトの名無しさん:05/01/11 21:30:46
>>768
アンカー間違い?>>762のやつってマズイの?
776デフォルトの名無しさん:05/01/11 21:34:23
>>775
アンカーが1個ずれてると思う
777デフォルトの名無しさん:05/01/11 21:34:37
なんでもいいなら
class a{ int *a; void func(); };
int main(){ return 0; }
でいいじゃん。ちゃんとクラス・関数・ポインタ使ってるよ。
778デフォルトの名無しさん:05/01/11 21:44:49
全世界情報部員管理システムとか、国家予算管理システムとか、落下する複数の物体にボールを投げ当てるシステムとかはどうだ?
779デフォルトの名無しさん:05/01/11 22:21:23
鼻毛記録システムなんてどうだい? 長い鼻毛と汚い鼻毛などをクラスに分類して、ボタンひとつで鼻毛記録の表示方法を変えられるとか?
780デフォルトの名無しさん:05/01/11 22:21:30
学校で課題が出て困ってます。
スロットマシーンを作るプログラムです。
・数字+Enterキーの入力をきっかけに乱数を発生し、0 から 9 までの数値を形成する
・これを三回繰り返し、得られた数字の並び方で点数を付ける
・三回とも同じなら 10 点、二個同じなら 2 点、並び順なら 5 点を与える
・これを十回繰り返して、合計を表示する
このプログラムできる方は教えて下さい!お願いします!
OS:UNIX
期限1月14日
781デフォルトの名無しさん:05/01/11 22:23:33
>>780
きっかけにって、その入力された数字は無視?
782デフォルトの名無しさん:05/01/11 22:24:35
>>781
乱数のseedにしろってことでしょ?
783デフォルトの名無しさん:05/01/11 22:25:39
>>781
無視でお願いします。
784デフォルトの名無しさん:05/01/11 23:02:30
エクセルで簡単な足し算や掛け算、引き算が20問くらい出題されて最後に採点される計算問題集作りたいんですけど、どんなプログラムかけばいいのかおしえてください。お願いします。
785デフォルトの名無しさん:05/01/11 23:05:11
>>784
●EXCEL・VBAの勉強法教えてスレ●
http://pc5.2ch.net/test/read.cgi/tech/1054356121/
786デフォルトの名無しさん:05/01/11 23:24:28
ポインタの質問です。初心者なので教えてください。 
int a; int *b; int c;

これを使って、
1.aに100を代入する
2.ポインタ変数bにaのアドレスを代入する
3.bの値をcに代入して、cを表示させて下さい。
(100が表示されればOKです。)
A アドレス(&c)を使う方法:変数のアドレスを代入する方法
B ポインタ(*b)を使う方法:値を代入する方法
注:c=a と代入した場合は100と表示されても認めません!
宜しくお願い致します。
787デフォルトの名無しさん:05/01/11 23:26:42
b = &a;
c = *b;
printf("%d", c);

授業ちゃんと聞け
788デフォルトの名無しさん:05/01/11 23:27:01
>初心者なので教えてください。 
>初心者なので教えてください。 
>初心者なので教えてください。 
>初心者なので教えてください。 
>初心者なので教えてください。 
789デフォルトの名無しさん:05/01/11 23:27:18
A ムリ
B a=100,b=&a,c=*b;
790デフォルトの名無しさん:05/01/11 23:36:15
>>788
むかついてるのはおまえだけじゃないぜ
791デフォルトの名無しさん:05/01/11 23:46:35
786≠788です。
792デフォルトの名無しさん:05/01/11 23:48:38
簡単な計算ソフトってどんなプログラムかけばできるんですか。
793デフォルトの名無しさん:05/01/11 23:52:36
>>792
マルチ乙。
794747:05/01/12 00:06:11
出来ました!
答えてくださった方々、ありがとうございました。
795デフォルトの名無しさん:05/01/12 00:37:54
[1] 授業単元:
[2] 問題文(含コード&リンク):

#include<stdio.h>
main()
{
int i,n,sum=0;
printf("6つのデータを入力\n");
i=0;
while(i<6){
scanf
sum=sum+n;
i++;
printf("%d個のデータの合計=%d\n",i,sum);
}
}
↑を実行結果が同じになるようにfor命令で書き換え

[3] 環境
 [3.1] OS: win
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも
[4] 期限:05年01月13日午前中
[5] その他の制限: 特に無し


お願いします
796デフォルトの名無しさん:05/01/12 00:40:18
797デフォルトの名無しさん:05/01/12 00:41:45
#include<stdio.h>
main()
{
int i,n,sum=0;
printf("6つのデータを入力\n");
for(i=0;i<6;i++){
scanf // 何だよこれ
sum=sum+n;
printf("%d個のデータの合計=%d\n",i,sum);
}
}

i=0, i++の位置とか分かりやすくしてくれてるのに・・・
798デフォルトの名無しさん:05/01/12 00:55:45
>>796-797
すいません検索し忘れてました。
ありがとうございました
799デフォルトの名無しさん:05/01/12 02:16:11
#include <stdio.h>
main()
{
int i,n,sum=0
printf("6個のデータを入力してください。\n");
i=O
for(;i<6;){
scanf("%d",&n);
sum=sumth;
i++;
printf("%d個のデータの合計=%d\n",i,sum);
}
800デフォルトの名無しさん:05/01/12 02:37:49
int i,n,sum=0;
printf("6つのデータを入力\n");
i=0;
for(;i<6; sum=sum+n,i++,printf("%d個のデータの合計=%d\n",i,sum))
scanf // 何だよこれ
801デフォルトの名無しさん:05/01/12 06:07:39
C++で、以下のプログラムを書けというアサイメントです。

int n を読み込み、arctan(1)のTaylor Seriesのゼロではないn個目までの和を求めて、πのだいたいの値を出力するプログラムを作れ。 プログラムには Double Precision arithmeticを使う事。

ちょっとこんがらがってしまって、自分では力不足なので お助け下さい。
802デフォルトの名無しさん:05/01/12 06:08:18
[1] 授業単元: c言語
[2] 問題文:
以下の仕様に基づいて,ハッシュ表(連結リスト)から指定された日にちをもつ予定データ(ノード)を表示する関数
void show_plan_day(NODE **tbl, int day);
を定義し,main()関数への必要な記述をおこなって,関数を実行できるプログラムを作成せよ
また,この関数の処理内容を説明せよ.
* 関数名:show_plan_day
* 仮引数NODE **tbl:データを探索するハッシュ表を受け取る.
* 仮引数 int day:探索する日にち
* 戻り値なし(void型)
* 機能:関数hash()の実引数としてdayを渡して,ハッシュ値を得る.
このハッシュ値に基づいて,ハッシュ表(連結リスト)から,指定されたdayとおなじDayをもつ
すべての予定データ(ノード)を探索し表示する.
連結リストでは時間の昇順に並んでいるため,同一日にち内であれば,先頭ノードから探索して表示するだけで,時間順に表示

お願いします
803デフォルトの名無しさん:05/01/12 07:23:01
>802
どこまでできた?
後でつまづかないように設計は自力でやってくれ
804デフォルトの名無しさん:05/01/12 07:32:35
学校の宿題じゃないんですが質問いいでしょうか?C++です

int a,b,c,d;
a = b == c ? d : 0; //←この文の意味を教えてください
805デフォルトの名無しさん:05/01/12 07:39:46
if (b == c) {
a = d;
}
else {
a = 0;
}
806デフォルトの名無しさん:05/01/12 07:43:30
>>805
わかりました、ありがとうございます。
807デフォルトの名無しさん:05/01/12 07:48:01
>802
ハッシュと連結リストの意味はわかってるんだな? 自分なりに説明してみろ。
808デフォルトの名無しさん:05/01/12 07:57:09
>>801
超テキトー C++ は知りません。
#include <stdio.h>
#include <stdlib.h>

int main( int argc, char **argv)
{
 if( argc < 2 ) {
  printf( "usage: test_pi [n]\n");
  return EXIT_FAILURE;
 }

 /* calculate: arctan(1) */
 int i, n = atoi( argv[1]);

 int sign = 1;
 int a = 1;
 double x = 0;

 for( i = 0; i < n; ++i ) {
  if( sign )
   x += (double)1.0 / a;
  else
   x -= (double)1.0 / a;
809デフォルトの名無しさん:05/01/12 07:58:03
>801
根拠となる式と条件はわかってるな? 論理破綻していないなら、もう一人の自分が混乱した箇所をassertやデバッガでデバッグしてみろ。
810808:05/01/12 07:58:29

  a += 2;
  sign = !sign;
 }

 /* calcuate: pi */
 printf( "pi is about %f\n.", x * 4);

 return EXIT_SUCCESS;
}

結果
$ ./test_pi 10000
pi is about 3.141493
811デフォルトの名無しさん:05/01/12 09:39:31
>>802
ハッシュ表(連結リスト)って言葉の意味がわからない
オープントハッシュのことか?
NODEの構造を示してくれないと仕様に沿ったプログラムは出してもらえないぞ
#define HASH_SIZE 366
int hash(int n){return n%HASH_SIZE;}
void show_plan_day(NODE **tbl, int day)
{
int h=hash(day);
NODE* node=tbl[h];
while(node!=NULL){
if(node->Day==day){
printf("%s\n",node->Schedule);
}
node=node->next;
}
}
812801:05/01/12 09:44:40
801です

808さんのをヒントに自分のコードを見直して、作り直してみみたら ちゃんと動きました!
感謝感謝でうs。どうもありがとうーー
813デフォルトの名無しさん:05/01/12 09:47:28
>808,>810
精度が落ちた原因は、絶対値の大きい数から加減したことと、後で4倍したことにある。
814デフォルトの名無しさん:05/01/12 10:36:06
>>813
ソースきぼん
815デフォルトの名無しさん:05/01/12 10:38:42
×ソース ○ソースコード
816デフォルトの名無しさん:05/01/12 10:39:23
タルタルソース
817M野さん:05/01/12 10:52:55
分数の計算を行うためにクラスRationalを作り、そのクラスをテストするメインプログラムを書け。
このクラスのprivateデータ:分子と分母は整数型の変数にする。
このクラスのオブジェクトが宣言されたときに初期化されるよう、コンストラクタ関数を用意する。
初期値が与えられない場合はデフォルト値をセットすること。コンストラクタは、分数を通分した形で格納しなければならない。
例えば、分数2/4の場合、分子は1、分母は2としてオブジェクト内に格納する。また、次の2項演算子を多重定義すること。

(a)+演算子で2つの分数の加算を行う。結果は通分した形で保存すること。
(b)-演算子で2つの分数の減算を行う。結果は通分した形で保存すること。
(c)*演算子で2つの分数の乗算を行う。結果は通分した形で保存すること。
(d)/演算子で2つの分数の除算を行う。結果は通分した形で保存すること。

また、次のようなメンバ関数を定義すること。

(e)分数をa/bの形式でプリントする。ここでaは分子、bは分母。
(f)分数を浮動小数点形式でプリントする。

↑の問題が分からなくて困っています(ToT)/~~~
よろしくおねがいします(*^_^*)☆♪
818デフォルトの名無しさん:05/01/12 10:53:24
[3.1] OS: xp
 [3.3] C++でVC
[4] 1/12中
以下の計算を9回ループさせたいのですが方法がわかりません。
よろしくお願いします。
#include <stdio.h>
#include <math.h>
main()
{
double x0,x1,x2;
double f(double x);
x0 = 0; x1 = 10;
while ()
{
x2 = x0+(x1-x0)/2;
if (f(x2+1.0e-6) > f(x2-1.0e-6)) x2 = x1;
else x2 = x0;
}
printf("x0 = %g\n",x0);
printf("x1 = %g\n",x1);
}
double f(double x)
{
double y;
y = x+14/x;
return (y);
}
819デフォルトの名無しさん:05/01/12 11:00:29
>818
int i;
for(i=0;i<9;i++)
じゃダメか?
820デフォルトの名無しさん:05/01/12 11:04:47
結構大きめのプログラムなのですが、本当にどこから手をつけていいのやら 全く持って分かりません・・
どなたか 助けてくださいいいい

プロジェクト内容をリンクしておきました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/64.txt

全く持って、頭に構想さえも浮かんできません。ていうか、まじ分かりません。
どなたか お手伝い願えませんか。。お願いします!!
821デフォルトの名無しさん:05/01/12 11:11:53
>817 できるところまでやってみろ!
class Rational{
private:int m_num,m_denom;
public:Rational(){...}
Rational(int _n,int _d){...}
Rational operator+(const Rational&a,const Rational&b){...return Rational(...,...);}...
};
822デフォルトの名無しさん:05/01/12 11:35:46
>820
もうここで解くレベルじゃないな。何を使って作るんだい?
わからん言葉があったら聞くんだな。
823デフォルトの名無しさん:05/01/12 11:50:23
>820
ビットのチェックは、bit-wise演算子か、ビットフィールドを使え。ファイルの読み込みは、fread使えば良い。日頃からコードの再利用を考えてないから、大きなプロジェクトであたふたしちゃうんだろ?
824820:05/01/12 11:51:55
すいません、忘れていました。 C++です。
てんぱってしまっています。。
825デフォルトの名無しさん:05/01/12 12:35:02
>821
friendの指定忘れてるぞー
826デフォルトの名無しさん:05/01/12 12:55:50
>>817
boost::rational
827デフォルトの名無しさん:05/01/12 12:57:30
>>826
よくもまぁ、BOOSTなんて非標準な物を使えと言えるもんだなぁ。
828デフォルトの名無しさん:05/01/12 13:06:34
>>827
いいじゃないか、4年後には標準になるんだから
829デフォルトの名無しさん:05/01/12 13:09:33
BOOSTが標準でついてくるVC++6がほしい!
830デフォルトの名無しさん:05/01/12 14:29:34
【問題】
C言語で標準入力から C 言語などのプログラムテキストファイルを読み込み
使用している関数名を頻度順に並べなさい。
これは宣言文と実際の式のどちらも含みます。
なお、同じ頻度の関数は辞書順に並べなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに依存しなければなりません。
勝手な上限を設けてはいけません。
但し、関数名の長さは高々 255 文字と仮定して良い。
(注)どちらもWindows の API は使用しないで作って下さい。
831デフォルトの名無しさん:05/01/12 14:38:29
環境:C言語
学習範囲:for文・while文
問題:1から6までのそれぞれの階乗を計算して表示するプログラムを書きなさい。
ヒント:i=1からスタートして逐次(n-1)!*nを計算する。


ここまではやってみたのですがここから先にすすめません。よろしくお願いします。

#include <stdio.h>

int main(void)

{

int i;

for (i=1; i<6; i++) {
832デフォルトの名無しさん:05/01/12 14:45:45
[1] 授業単元:情報工学
[2] 問題文(含コード&リンク):(一次元配列の問題)フィボナッチ数列a[0]〜a[n]を作る。
nの値は3以上30以下とする。異常終了の場合、(nの値が2以下、31以上の場合)例えば
 「40はnの値として不適切です!」という文を出す。
 a[0]=1
a[1]=1
a[2]=2
a[3]=3

 ・
 ・  という実行結果を出す。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ(バージョン):Visual Basic Studio.net
 [3.3] 言語:C++
[4] 期限:2005年1月18日まで
[5] その他の制限: 特になし
  みなさんお願いします!
833デフォルトの名無しさん:05/01/12 14:52:20
>>831
そこまでやったんだら、
int main(void)
{
int i;
for (i = 1; i <= 6; ++i) {
/* (n - 1) ! * n を計算する。 */
/* n! を表示する。 */
}
return 0;
}
くらい書いておけばいいのに。
で、
int main(void)
{
int i;
int val;
for (i = 1, val = 1; i <= 6; ++i) {
val *= i;
printf("%d の階乗は %d\n", i, val);
}
return 0;
}
こんなもんかな。
834デフォルトの名無しさん:05/01/12 14:52:28
>831
直前の階乗f_(i-1)にiを掛けるとf_iになる。なお、0!=f_0=1.
int f;
835デフォルトの名無しさん:05/01/12 14:53:15
>>830 >>832
過去ログ参照。
836デフォルトの名無しさん:05/01/12 14:56:12
>832
数学的帰納法を思い出せ。任意のa[i]とa[i+1]からa[i+2]が求まる。
837デフォルトの名無しさん:05/01/12 15:10:44
>>833-834
ありがとうございます
838デフォルトの名無しさん:05/01/12 15:25:35
Visual Basic Studio.net?

template <int n>
class CFib{
enum{val=(int)CFib<n-1>::val+(int)CFib<n-2>::val};
};
template <> class CFib<0>{enum{val=0}};
template <> class CFib<1>{enum{val=1}};
839デフォルトの名無しさん:05/01/12 15:47:56
>>832
cでやってみた。あとは頑張れ。
#include<stdio.h>
int fibonacci(int);

int main(void){
int a[40],i,x;
a[0]=a[1]=1;

printf("フィボナッチのn項まで求めます(3<=n<=30)n=");
scanf("%d",&x);

if(3>x || 30<x)
printf("%dはnの値として不適切です。",x);
else{
printf("フィボナッチ1項a[0]=%d\nフィボナッチ2項a[1]=%d\n",a[0],a[1]);
for(i=3;i<x;i++){
a[i-1]=fibonacci(i);
printf("フィボナッチ%d項a[%d]=%d\n",i,i-1,a[i-1]);
}
}
return 0;
}

int fibonacci(int n){

if(n==1 && n==2)
return 1;
if(n>3)
return fibonacci(n-1)+fibonacci(n-2);
}
840デフォルトの名無しさん:05/01/12 15:50:07
フィボナッチ数列って典型的な「再帰は使わない方がいい」課題だと思うが…
別に再帰使えとは書いてないだろ?
841デフォルトの名無しさん:05/01/12 15:55:28
すぐ再起使いたがる香具師は素人
ってかフィボナッチに再帰はさすがに酷いな。

頑張れば定数時間だし、ちょっと工夫するだけで対数時間なのに
842デフォルトの名無しさん:05/01/12 15:59:43
宿題なんだから定義をそのまま函数にするだけで十分じゃないか?

ところで定数時間ってどうやるの?
843デフォルトの名無しさん:05/01/12 16:01:34
>>840,841
大学とかの課題だと、再帰の勉強のために
フィボナッチや階乗計算とかを再帰で解けとか言われなかったっけ?
844デフォルトの名無しさん:05/01/12 16:04:49
>>843
指定されてりゃしょうがないけど、
この場合指定がないんだから再帰を使わないべきでは?
845デフォルトの名無しさん:05/01/12 16:06:37
使うべきでも使わないべきでもないだろ
846デフォルトの名無しさん:05/01/12 16:14:27
#include <stdio.h>
#include <math.h>
int main()
{
int n,i;
int a[30];
printf("(3 <= n <= 30)\nn = ");
scanf("%d", &n);
if (n < 3 || 30 < n) {
printf("%d は不適切です\n", n);
return 1;
}
for (i=1; i<=n; i++) {
a[i-1] = (int)(exp(-0.804719 + i * 0.481212) + 0.5);
printf("%d : %d\n", i, a[i-1]);
}
return 0;
}

ひねくれるとこんな感じか
847846:05/01/12 16:19:14
スマン、26項で誤差出る _| ̄|○
848デフォルトの名無しさん:05/01/12 16:26:23
オリジナルのプログラミングを作る。内容・プログラムの大小は問わないが、
関数・クラス・ポインタの内容を必ず用いること。
という宿題が出て、このスレに乗せて

class a{ int *a; void func(); };
int main(){ return 0; }

というのを教えていただいたのですが、

d:\新しいフォルダ (2)\cpp1.cpp(1) : error C2580: クラス名 'a' が再定義されています。
d:\新しいフォルダ (2)\cpp1.cpp(1) : 'a' の宣言を確認してください。

というエラーが出ます。
どこをどう直せばいいのでしょうか?
環境はこんな感じです。
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):Microsoft Visual C++
 [3.3] 言語:C++
849デフォルトの名無しさん:05/01/12 16:28:35
>>848
class aとint *aで同じ a という名前を使っているからそうなる。
どっちかを別の名前に変えろ。
850デフォルトの名無しさん:05/01/12 16:30:51
#include <vector>
class a{static vector<int> v;};

このような場合どのようしにて静的メンバ変数
を再宣言すればいいのでしょうか?
教えてください。
851デフォルトの名無しさん:05/01/12 16:32:09
vector<int> a::v;
852デフォルトの名無しさん:05/01/12 16:38:07
>>849
ありがとうございました!!
853デフォルトの名無しさん:05/01/12 16:38:46
>>851
ありがとうございます
854デフォルトの名無しさん:05/01/12 16:39:21
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):質量5kgの物体を初速度v[m/s]で、水平な地面に対し角度10度〜80度までそれぞれ10度ずつ変えて射出した。
                その時の物体の位置が最も高くなる時の高さ、物体の着地地点、着地までの時間をそれぞれの角度において計算するプログラムを作成せよ。
                なお、物体の初期位置を水平軸x=0、垂直軸y=0とし、場所は地球表面、初速度vは4とする。
                また、ポイント・関数・クラスの使用を必須とする。
[3] 環境
 [3.1] OS:Win
 [3.2] コンパイラ(バージョン):Visual C++
 [3.3] 言語:C++
[4] 期限:2005年1月13日16:00まで
[5] その他の制限:プログラムの文頭に「#include<math.h>」を加えること。

自分で考えてはみたのですが、全然わかりません。
どなたかよろしくお願いします。
855デフォルトの名無しさん:05/01/12 16:45:03
>848
クラス、関数、ポインタの「内容」を実質的に使っていない。そんなに落第生になりたいのか?
856デフォルトの名無しさん:05/01/12 16:47:01
>>855
すいません。間違えていました。
ポイント・関数・クラスの使用は関係ありませんでした。
857デフォルトの名無しさん:05/01/12 16:48:52
>>854
重力加速度は9.8でいいのん?
858デフォルトの名無しさん:05/01/12 16:51:45
>>854
解析的に解ける問題じゃないか。
出題者はなんで解析的に解けない問題を出さないんだろう。
859デフォルトの名無しさん:05/01/12 16:52:36
>>857
M_PI * M_PI でw
860デフォルトの名無しさん:05/01/12 16:53:18
>854
三角関数使えば、初速のx,y成分が分かる。後は物理公式か積分使えばOK。空気抵抗は?
861デフォルトの名無しさん:05/01/12 16:54:15
>>855
では、ポイント・関数・クラスを使ったプログラムを教えていただけませんか?
862デフォルトの名無しさん:05/01/12 16:55:21
>>860
空気抵抗は考えないでいいみたいです。
863デフォルトの名無しさん:05/01/12 16:56:39
>>861
どういう問題を解いて欲しい?
864850:05/01/12 16:56:41
class a{static int b;};
int a::b;
a::b = 10;
コンパイルすると「2回以上初期化されている」とエラーがでるのですが、
どういうことなんでしょうか?教えてください。
865デフォルトの名無しさん:05/01/12 16:56:45
>861
お前のホッペをバッコーン☆
866デフォルトの名無しさん:05/01/12 16:57:22
>>862
粘性抵抗は?
867デフォルトの名無しさん:05/01/12 16:58:33
>>864
int a::b = 10;
868デフォルトの名無しさん:05/01/12 16:58:58
>>864
int a::b = 10;
869850:05/01/12 17:00:15
int a::b;
a::b = 10;
だとエラーが出て、
int a::b = 10;
だとエラーがでないのはなぜなんでしょうか
870デフォルトの名無しさん:05/01/12 17:01:40
初期化と代入は違う
871デフォルトの名無しさん:05/01/12 17:02:37
>>863
どんなものでもいいんです。
プログラムの大小は問わないらしいので。
872850:05/01/12 17:03:32
>>867,>>868,>>870
ありがとうございました。
873デフォルトの名無しさん:05/01/12 17:04:41
>>860
プログラムの組み立て方がわからないので、できれば組み立てていただきたいのですが。。
874デフォルトの名無しさん:05/01/12 17:06:15
>871
自分でやれ〜パ〜ンチ!☆
875デフォルトの名無しさん:05/01/12 17:13:52
>873
角度tを仮引数にした関数で求めたい変数を出す。
mainの中でforループで角度変えながら関数呼んで計算結果を簡単な表にする。
876デフォルトの名無しさん:05/01/12 17:15:14
なんだよ、このスレ。
役たたずしかいないな。
宿題を片付けますYO!だって?誰もできないんだったら意味ないじゃないww
877デフォルトの名無しさん:05/01/12 17:16:07
>>876=871
もう来なくていいよ
878デフォルトの名無しさん:05/01/12 17:18:04
>876
ぼるじょあが留守だから、拙者が代わりに助言してる次第。不満あらば帰れよ
879デフォルトの名無しさん:05/01/12 17:22:31
>>873
math.hって書いてあるからCで書いたけど、いいのかな?

#include <stdio.h>
#include <math.h>
#ifndef M_PI
#define M_PI 3.14159265
#endif
int main()
{
 double v=4.0, g=9.8;
 double h, t, x, rad, c, vs, vc;
 for (c=10.0; c<=80.0; c+=10.0) {
  rad = c*2*M_PI/360;
  vs = v*sin(rad); vc = v*cos(rad);
  h = vs*vs/(2*g);
  t = 2*vs/g;
  x = vc*t;
  printf("%d°:\n\t最高点 y=%g[m]\n\t着地時間 %g[sec]\n\t着地点 x=%g[m]\n", (int)c, h, t, x);
 }
 return 0;
}
880デフォルトの名無しさん:05/01/12 17:25:26
>>879
ありがとうございます!!
881デフォルトの名無しさん:05/01/12 17:29:00
どなたか関数・ポインタ・クラスを使ったプログラムを組み立ててはいただけませんか?
プログラムの大小はどうでもいいので、どなたかお願いします。
環境はWindouws・Microsoft Visual C++です。
882デフォルトの名無しさん:05/01/12 17:29:01
わざわざ質量が書いてあるってことは、
もしかしてgもその都度求めないといけないとか…(´Д`)
883879:05/01/12 17:30:28
> ポイント・関数・クラスの使用を必須とする。
これ見落としてたわ…
884デフォルトの名無しさん:05/01/12 17:32:57
>>883
あっ、そこは気にしないでください。
私が打ち間違っただけなので。。
885デフォルトの名無しさん:05/01/12 17:35:24
>881
図書館逝けばソースがころがってるというのに、あきらめの悪いヤツだ。次のうちから選べ。目覚まし時計、電卓、年号変換、データベース管理、生年月日から年齢を求める
886デフォルトの名無しさん:05/01/12 17:37:03
多倍長整数クラスでも作れば?
887デフォルトの名無しさん:05/01/12 17:40:13
>886
彼の実力じゃ無理
888 :05/01/12 17:40:47
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
#include<stdio.h>
int beki(int a,int b);
main()
{
 int a,b;
 a=3;
 b=2;
 printf("%dの%d3乗は%d\n",a,b,beki(a,b));
 a=5;
 b=4;
 printf("%dの%d3乗は%d\n",a,b,beki(a,b));
}
int i,ans;
{
 ans=1;
 for(i=1;i<=b;i++){
   fans=ans*a;
 }
 return(ans);
}
889デフォルトの名無しさん:05/01/12 17:41:33
>>888を変更して、関数bekiの中で計算した結果も表示するようにせよ。
mainは次のプログラムを使用せよ
#include<stdio.h>
int beki(int a,int b)
main()
{
 beki(3,2);
 beki(5,4);
}
[3] 環境:C言語
[4] 期限:2005年1月13日まで

よろしくお願いします
890デフォルトの名無しさん:05/01/12 17:43:19
>>885
では、生年月日から年齢を求める。というのをお願いできますか?
891デフォルトの名無しさん:05/01/12 17:44:31
>>889
#include <stdio.h>
void beki(int, int);
main()
{
 beki(3,2);
 beki(5,4);
}
void beki(int a, int b)
{
 int i, ans=1;
 if(b<0) return;
 for(i=0;i<b;i++)
  ans = ans * a;
 printf("%d\n",ans);
}
892デフォルトの名無しさん:05/01/12 17:57:46
>890
time_tは日付と時刻を表す型だ。struct tmは日付と時刻を表す構造体だ。これとlocaltime,mktime,strftime,time関数を使えば簡単。関数ヘルプで見よ
893デフォルトの名無しさん:05/01/12 18:05:06
>>881
出たばっかだしboost::serializationでも使ってみれば?
894デフォルトの名無しさん:05/01/12 18:05:56
difftime関数は、2つのtime_tを比較し、秒数の差をdouble型で返す。ヘルプを見よ。

注意 #include<time.h>を忘れるな!
895デフォルトの名無しさん:05/01/12 18:09:45
>>892
すいません。どうやったらいいかわからないんで、組み立てて教えていただけませんか?
896デフォルトの名無しさん:05/01/12 18:12:05
わかっているとは思うが、1時間は60×60=3600秒。1日は24時間。
897デフォルトの名無しさん:05/01/12 18:12:22
>>895
検索した方がアホみたいにソースが出るわけだが
898デフォルトの名無しさん:05/01/12 18:17:49
>895
生年月日を尋ね、struct tm bdataに入力。
bdataから生年月日のtime_t birthを求める。
現在の日時をtime_t nowに格納。
difftime関数でnowとbirthを比較。
年齢が分かる。
899デフォルトの名無しさん:05/01/12 18:19:43
すごく丁寧に説明してもらっているのですが、やっぱりどうやって組み立てるかわかりません。。
ばかですいません。。
900デフォルトの名無しさん:05/01/12 18:25:29
>899
それぞれの関数のヘルプを見る前にあきらめてはいけない。VC++を使ってるなら、ヘルプで関数名を検索すれば見れる。関数で何ができるかが分かる。
901デフォルトの名無しさん:05/01/12 18:34:12
tmの内容をヘルプで見ながら続きを書いてみよ。
struct tm bdata;
printf("何年: ");
scanf("%d",&bdata.tm_yday);
printf("何月: ");
...
902デフォルトの名無しさん:05/01/12 18:34:40
[2] 問題:入力した文字列を逆順に表示する
[3] 環境
 OS:Unix
 言語:C
[4] 期限:2005年1月20日正午

スタックを利用して入力した文字列を逆順に出力するプログラムなのですが
コンパイル時にオーバーフロウとなってしまいました。その原因がわかりませ
ん。あとreverse_str関数がうまくできなっかたのでそれも教えていただきたいです。
一応作れたプログラムを載せます。
#include <stdio.h>
#include <stdlib.h>
#define STACK_EMPTY -32768

struct cell {
char data;
struct cell *link;
};

struct cell *getcell();
struct cell *create();
void insert(struct cell *, int, char);
void delete(struct cell *, int);
void push(struct cell *, char);
char pop(struct cell *);
void reverse_str( char *);

903デフォルトの名無しさん:05/01/12 18:36:41
int main(void)
{
char string[100];
struct cell *stack;

printf("Input String: "); scanf("%s", string);
reverse_str( string );
printf("Reverse String: %s\n", string);
return 0;
}
904デフォルトの名無しさん:05/01/12 18:39:00
void insert(struct cell *plist, int n, char data)
{
int i;
struct cell *p;
void delete(struct cell *list, int n)
{
int i;
struct cell *p;

if(n<=0) {
printf("Error\n");
exit(0);
}

for(i=0; i<n-1 && list->link != NULL; list=list->link, i++);
905デフォルトの名無しさん:05/01/12 18:40:16
if(list->link == NULL) {
printf("Error\n");
exit(0);
}
p = list->link;
list->link = p->link;
free(p);
}

struct cell *getcell()
{
struct cell *p;

p = (struct cell *)malloc(sizeof(struct cell));
if(p==NULL) {
printf("Error\n");
exit(0);
}
return p;
}  

for(i = 1; i<n; i++) {
if(plist ==NULL) {
printf("Error\n");
exit(1);
}
plist = plist->link;
}

906デフォルトの名無しさん:05/01/12 18:40:34
>902
スタックを食い潰すまで止まらないのが原因。前提や終了条件が間違ってるのでは?
907デフォルトの名無しさん:05/01/12 18:41:16
p = getcell();
p->data = data;
p->link = plist;
plist = p;
}

void push(struct cell *stack, char data)
{
insert( stack, 1, data );
}
char pop( struct cell *stack )
{ char data;
if(stack->link == NULL) {
data = STACK_EMPTY;
}
else {
data = stack->link->data;
delete( stack, 1 );
}
return data;
}
struct cell *create()
{
struct cell *p;

p = getcell();
p->data = -1;
p->link = NULL;
return p;
}

908デフォルトの名無しさん:05/01/12 18:42:42
void swap(char* lhs, char* rhs)
{
char oldLhs = *lhs;
*lhs = *rhs;
*rhs = oldLhs;
}

void reverseStringRange(char* first, char* last)
{
for (; first < last; ++first) {
swap(first, --last);
}
}

void reverseString(char* string)
{ reverseStringRange(string, string + strlen(string)); }

int main(void)
{
char s[] = "qwert";
printf("%s", s);
reverseString(s);
printf("%s", s);

return 0;
}
909デフォルトの名無しさん:05/01/12 18:44:26
>899
関数や構造体のヘルプが見れないの?
VCのヘルプの使い方が分からないの?
910デフォルトの名無しさん:05/01/12 18:49:48
>>909
ヘルプが見れないんです。
911デフォルトの名無しさん:05/01/12 18:52:33
>>902
6回もわけて書くんだったらあぷろーだつかえばか
912デフォルトの名無しさん:05/01/12 18:57:28
VCで何もない余白にtimeって入力してその単語の上をクリックして、キーボードの左上のF1ボタンを押してごらん。何か出てこないか?
913デフォルトの名無しさん:05/01/12 18:58:38
>>899
わからないんじゃなくてわかろうとしていないんだろうが

ほんの少しでも考えたのなら、全然形になっていなくてもいいからコードをここに書いてみろよ
考えたふりすらしてない奴に教える気なんぞない
914デフォルトの名無しさん:05/01/12 19:08:25
>910
お〜い、>912を読んだか〜?
915デフォルトの名無しさん:05/01/12 19:08:50
ヘルプを表示できません。っていうメッセージが出てきます。
916デフォルトの名無しさん:05/01/12 19:14:56
>915
timeは半角で入力した?
チカチカ点滅するヤツ(キャレット)はちゃんとtimeの上に乗っかってる? timeと他の単語がくっついてない?
917デフォルトの名無しさん:05/01/12 19:21:17
>>916
ちゃんとあってますよ。
でも、何回やっても表示できませんって出るんです。
918デフォルトの名無しさん:05/01/12 19:28:18
>917
それは大変だ、ではしかたない、ヘルプのウィンドウにコンボボックスとタブ(つまみのようなもの)が見えるか〜? 見えなかったら >> のようなボタンをクリックして〜
919デフォルトの名無しさん:05/01/12 19:30:10
ココってぼるじょあスレじゃねーの?
920デフォルトの名無しさん:05/01/12 19:36:25
疲れた
921デフォルトの名無しさん:05/01/12 19:40:07
>>919
ぼるじょあは氏にました。
次回から大原ゆきが宿題を片付けます。
922デフォルトの名無しさん:05/01/12 19:46:07
>>919
何を今更
923デフォルトの名無しさん:05/01/12 19:49:42
だめだこりゃ
924デフォルトの名無しさん:05/01/12 20:59:29
次はだれだろワクワク
>>950スレ立てよろしく。
925デフォルトの名無しさん:05/01/12 21:05:11
ギコになったことってあったっけ
926デフォルトの名無しさん:05/01/12 21:05:49
スタックを利用して逆順にする関数を知りたいのですが...
927デフォルトの名無しさん:05/01/12 21:23:37
>>926
普通 auto な変数はスタックを利用しているけど?
928デフォルトの名無しさん:05/01/12 21:26:41
>926
template<class t_type>
void rev(t_type* p,int n){
if(n<2)return;
t_type tmp=*p;
*p=p[n-1];
p[n-1]=tmp;
rev(++p,n-2);
}
929デフォルトの名無しさん:05/01/12 21:29:36
>>902
この宿題は、関数呼び出しの際にコンパイラに使われるスタックを
使って再帰を実行しなさいと言うことではなくて、スタックを自分で
用意しなければならないのかい?
930デフォルトの名無しさん:05/01/12 21:29:55
>>928
末尾再帰かよ(w
931デフォルトの名無しさん:05/01/12 21:33:06
データを格納するpushとpopの関数を作成してそれを利用して
逆順に表示するように言われています。
932929:05/01/12 21:35:46
>>931
「関数の再帰をしてはならない」と言う言外の指示を感じるだが、
君自身はどう思うかい?それによって解答が多少変わると思う
んだが。
933デフォルトの名無しさん:05/01/12 21:38:40
関数も使用するなと言われてます。
934デフォルトの名無しさん:05/01/12 21:39:03
[2] 問題:0〜99まで、1行に10個ずつ、桁を揃えて表示せよ。
実行例
0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
.....
90 91 92 93 94 95 96 97 98 99

[3] 環境 :C言語
[4] 期限:2005年1月14日

よろしくお願い致します。
935デフォルトの名無しさん:05/01/12 21:43:29
>>934
#include <stdio.h>
int main(void) {
 int i;
 for (i=0; i<100; i++) {
  if (i!=0 && i%10==0) printf("\n");
  printf("%2d ",i);
 }
 return 0;
}
936デフォルトの名無しさん:05/01/12 21:45:04
まだスタックについて詳しく習っていないので再帰についてなんともいえません。
すみません。スタックの性質の先に入れたデータが後から出てくることを利用しなさいと
言われていてreverse_str中のpopとpushの利用法がわからないんです。
937sage:05/01/12 22:01:15
>>935
ありがとうございました。
助かりました。
938デフォルトの名無しさん:05/01/12 22:02:46
先生に確認を取りました。
「コンパイラに使われるスタックを使って作りなさい」との事でした。
939902:05/01/12 22:04:12
938は僕でありません
940デフォルトの名無しさん:05/01/12 22:16:00
文字列全部pushでいれたあと、全部popで出せばいいんでは?
941デフォルトの名無しさん:05/01/12 22:19:06
[1] C言語
[2]
  関数名:recursive_func  仮引数int n, int c:
  戻り値(int型):再帰的に計算した結果を返す.1から9までの整数が返る.
  機能:以下の式に基づいて,ラッキーナンバーを計算する.
  
   recursive_func(n,c)=
n=0の時 c mod 9+1
n>0の時 (n*recursive_fucn(n-1,c)+c)mod 9+1

 第2引数として,指定した日にちを渡す.そして,
 recursive_func()関数によって返された値がその日にちのラッキーナンバーとなる.
 たとえば,15日(土曜日(6))のラッキーナンバーを計算するための関数呼び出しは,
  recursive_func(6, 15)
 となる.

942902:05/01/12 22:19:25
はい、やってみます。
943デフォルトの名無しさん:05/01/12 22:27:29
>>941
int recursive_func(int n, int c)
{
    if (n == 0) return c % 9 + 1;
    else if (n > 0) return (n * recursive_func(n - 1, c) + c) % 9 + 1;
    else exit(1);
}
944デフォルトの名無しさん:05/01/12 23:21:21
名前:
E-mail:
内容:
【質問テンプレ】
[2] 問題:Cでビットマップ画像を処理をする。1つはモノクロ化で
     もう1つは画像の明るさを調節する。
[3] 環境
 [3.1] OS:Win
 [3.3] 言語:C

明るさ調節はわかったのですが、モノクロ化がいまいちわからないので
おしえてください。


http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/65.txt
945デフォルトの名無しさん:05/01/12 23:24:56
>>944
実は手法がいくつかあって、見えかたが違ってくる。
946デフォルトの名無しさん:05/01/12 23:30:18
RGBをYCrCbにしてYだけ取ってくるとか、二値画像変換とか、
色々あるからなあ
947デフォルトの名無しさん:05/01/12 23:36:50
2値画像は違うと思うぞ。
948デフォルトの名無しさん:05/01/12 23:42:00
>>947
モノクロプリンタへ送ってるデータは2値画像データですね。
949デフォルトの名無しさん:05/01/13 01:03:34
まずグレースケール作って、判別分析法かなんかで2値化ですかねぇ?

グレースケールは画像処理のテンプレから
Q:カラー画像をグレースケールに変換するには?
A:グレースケールへの変換には、完全な解答はありません。
一般には、下式が用いられるようです。
グレースケール = 0.299R + 0.587G + 0.114B
ちなみに、(R+G+B)/3はオススメできません

判別分析法はぐぐってくれ。

もちろん、解はこれ以外にもあるのは>>945>>946のとおり
950デフォルトの名無しさん:05/01/13 01:22:04
点数(実数値)を入力して、0以上60未満はC、60以上80未満はB、
80以上100以下はAと表示せよ。但し、それ以外の値はエラーとする。

int main(void)
{
double no;
printf("点数を入力:");
scanf(「 (1) 」);
if (「 (2) 」)
puts("入力エラーです");
else if (「 (3) 」)
puts("C");
else if (「 (4) 」)
puts("B");
else
puts("A");
return (0);

どなたか教えてください。
951デフォルトの名無しさん:05/01/13 01:30:06
>>950
#include<stdio.h>
int main(void)
{
double no;
printf("点数を入力:");
scanf("%lf",&no);
if (no<0 || no>100)
puts("入力エラーです");
else if (no>=0 && no<60)
puts("C");
else if (no>=60 && no<80)
puts("B");
else
puts("A");
return (0);
}
952デフォルトの名無しさん:05/01/13 01:33:13
>>951
間違っては無いかもしれないが・・・
953デフォルトの名無しさん:05/01/13 02:45:36
>>952
・・・の部分を教えてくれ
954デフォルトの名無しさん:05/01/13 03:00:39
#include<stdio.h>
int main(void)
{
double no;
printf("点数を入力:");
scanf("%lf",&no);
if (no<0.0 || no>100.0)
puts("入力エラーです");
else if (no<60.0)
puts("C");
else if (no<80.0)
puts("B");
else
puts("A");
return 0;
}
955デフォルトの名無しさん:05/01/13 03:13:28
問い
(0,1)で一様分布する変数 xi から
標準正規分布する変数 yj を
作るには、次の式を用いる。
yj=Σ(i=1,12) xi-6.0

rand() を用いて xi を12000個
発生させて、作成した yj の
分布を
-5〜5までの間で
* を用いた棒グラフにせよ。

お願いします
956デフォルトの名無しさん:05/01/13 08:17:16
以下のプログラムがうまく動きませんどこがおかしいのでしょうか?
#include <stdio.h>
#include <math.h>
main()
{
int i;
double x0,x1,x2;
double f(double x);
x0 = 0; x1 = 10; i=0;
while (i<=9)
{
x2 = x0+(x1-x0)/2;
if (f(x2+1.0e-6) > f(x2-1.0e-6)) x2 = x1;
else x2 = x0;
i=+1;
}
printf("x0 = %g\n",x0);
printf("x1 = %g\n",x1);
}
double f(double x)
{
double y;
y = x+14/x;
return (y);
957デフォルトの名無しさん:05/01/13 08:24:32
>>956
朝から釣りご苦労さま。
958デフォルトの名無しさん:05/01/13 08:26:32
>>956
>どこがおかしいのでしょうか?
あんたの頭。
959デフォルトの名無しさん:05/01/13 08:40:24
>956
ifの条件が誤差を考慮してない。区間の縮小で論理錯誤。最後に}がない。全て一からやり直せ。この場合、2分法を使うとよい。
960デフォルトの名無しさん:05/01/13 09:04:55
>955
//疑似乱数∈開区間(0,1)
#define myrand() \
(rand()+1.0)/(RAND_MAX+2.0)
961デフォルトの名無しさん:05/01/13 09:06:34
>>959
プ
962デフォルトの名無しさん:05/01/13 09:08:49
5桁のHex character stringをバイナリ形式のInt
に変換するには、どのようにしたらよいのでしょうか?

たとえば
String a=”B0070”
これをバイナリ形式のIntに変換したいのです。

よろしくお願いします。
963デフォルトの名無しさん:05/01/13 09:15:50
このスレ、香ばしいやつが常駐してるよな。(ワラ
964デフォルトの名無しさん:05/01/13 09:23:01
>962
strtoi,sscanf
965デフォルトの名無しさん:05/01/13 09:38:38
LCQ48:ナヌヤサイヤオカ,ヒカタサイタ,ラカヲヨミツロ
966デフォルトの名無しさん:05/01/13 10:13:17
LCN48:TXT:BEG:^E<$50.143.59.94>^M:END
967デフォルトの名無しさん:05/01/13 10:27:33
>>963
おまえが一番におってるって^^
968デフォルトの名無しさん:05/01/13 11:27:00

リスト構造を用い、任意の要素数n個の疎行列を
LU分解法によって解くプログラムを作れ。
ただし、以下のような構造にすること。
・疎行列のデータは外部から入力させる。
・(0の入力を省略するなどして)メモリを節約する構造にする。
・疎行列の0を含む割合を変えられる構造にする。

おながいします。
OSはUNIX、言語はCです。
969832:05/01/13 12:57:01
#include <stdio.h>
#include <math.h>
#define N 30
void main()
{
int n,i;
int a[30];
printf("フィボナッチ数列を作るプログラムです \n\n");
/*データの個数の入力*/
printf("nの値(3以上30以下の整数)を入力して下さい\nn = ");
scanf("%d", &n);
/*nが3以上30以下の整数でない場合*/
if (n < 3 || 30 < n) {
printf("%d は不適切です! \n", n);
}
for (i=1; i<=n; i=i+1) {
a[i-1] = (int)(exp(-0.804719 + i * 0.481212) + 0.5);
printf("a[%d] : %d\n", i, a[i-1]);
}
}
フィボナッチの数列の課題を聞いたものです。ここまでは出来てるんですが、
a[i-1] = (int)(exp(-0.804719 + i * 0.481212) + 0.5) の部分がよく分かりません。
何かの公式ですか? あと、異常終了がうまくいかないので、誰か教えて下さい!
970デフォルトの名無しさん:05/01/13 13:07:18
公式は知らんけど、a[1]=1,a[2]=1 としてa[i]=a[i-1]+a[i-2]にを求めるだけだろ
for文をelseの中に入れないから3未満31以上の数字でも実行してしまう
971デフォルトの名無しさん:05/01/13 13:18:25
>>969
その公式は誤差出るって書いただろうに。゜(゚´Д`゚)゜。
ちなみにα=(1+√5)/2と置いて、
α^n / √5 に一番近い整数がn番目のフィボナッチ数 ていう
ビネの公式を簡略化したもの。

#include <stdio.h>
#include <math.h>

int main()
{
 int n, i, s=1;
 int a[30];
 printf("フィボナッチ数列を作るプログラムです \n\n");
 /* データの個数の入力 */
 printf("nの値(3以上30以下の整数)を入力して下さい\nn = ");
 scanf("%d", &n);
 if (n<3 || 30<n) {
  printf("%d は不適切です! \n", n);
  return 1;
 }
 a[0]=1; a[1]=1;
 for (i=2; i<n; i++) {
  a[i] = a[i-1] + a[i-2];
 }
 for (i=0; i<n; i++) {
  printf("a[%d] : %d\n", i+1, a[i]);
 }
 return 0;
}
972デフォルトの名無しさん:05/01/13 13:23:46
#include <math.h>
削除し忘れた…
973832:05/01/13 13:29:25
>>971
本当にありがとうございます。
#include <stdio.h>
#include <math.h>
#define N 30
void main()
{
int n,i;
int a[30];
printf("フィボナッチ数列を作るプログラムです \n\n");
/*データの個数の入力*/
printf("nの値(3以上30以下の整数)を入力して下さい\nn = ");
scanf("%d", &n);
/*nが3以上30以下の整数でない場合*/
if (n < 3 || 30 < n) {
printf("%d は不適切です! \n", n);
}
a[0]=1; a[1]=1;
 for (i=2; i<n; i++) {
  a[i] = a[i-1] + a[i-2];
 }
 for (i=0; i<n; i++) {
  printf("a[%d] : %d\n", i+1, a[i]);
 }
うちの授業、returnとか使うの習ってないんですよ・・最初に言ってなくてすいません。
でも、これで3以上30以下の場合は動くんですけど、やっぱ異常終了はうまくいかなくて・・
よく分からんのです
974デフォルトの名無しさん:05/01/13 13:32:00
>>973
if (n < 3 || 30 < n) {
 printf("%d は不適切です! \n", n);
} else {
 a[0]=1; a[1]=1;
 for (i=2; i<n; i++) {
  a[i] = a[i-1] + a[i-2];
 }
 for (i=0; i<n; i++) {
  printf("a[%d] : %d\n", i+1, a[i]);
 }
}
975832:05/01/13 13:37:50
ありがとうございました!!
付け足ししてごめんなさい。ほんとに助かりました。
976955:05/01/13 13:41:34
≫960
本当にありがとうございます
977.kansai:05/01/13 15:13:18
初心者の質問ですいませんが、以下の問題に快く答えてくれる方がいればお願いします。
機械語(アセンブラなど)でプログラムを書いている場合は見過ごされるが、
プログラミング言語(C言語)のコンパイラでは発見されるエラーってどんなのがありますか?
978デフォルトの名無しさん:05/01/13 15:24:40
>>977
例えばポインタと整数の混同とか。(Cではキャストしないとエラーになる)
979デフォルトの名無しさん:05/01/13 15:52:50
どこかで誰かがC/C++の宿題を片付けます 38代目
http://pc5.2ch.net/test/read.cgi/tech/1105541524/l50
980デフォルトの名無しさん:05/01/13 16:36:49
>>977
>機械語(アセンブラなど)

アセンブラもプログラミング言語の一つだ。


# 機械語≠アセンブラ
981デフォルトの名無しさん:05/01/13 17:59:19
どうでもいいけどアセンブラはアセンブリ言語のコードをマシン語に変換するソフトのことだぞ
982デフォルトの名無しさん:05/01/13 19:38:14
>>981
うるせーよじじい
983デフォルトの名無しさん:05/01/13 19:44:28
>>982
無知蒙昧
新解け。
984デフォルトの名無しさん:05/01/13 22:52:07
整数を入力すると、その数字の読み方を出力するプログラムを作成してください。
入力する数字は9桁までとする。

例 158 one hundred and fifty eight
63567 sixty three thousand five hundred and sixty seven
985デフォルトの名無しさん:05/01/13 22:59:41
学生のとき思ったんだけどさあ、なんで列挙したりするときに
ナントカカントカアーンドナントカみたいに、アンド入れるわけ?
何個目にいれなきゃいけないとか決まりがあるの?
986デフォルトの名無しさん:05/01/13 23:05:23
正の数だけでいいのかな
987984
>>986
okです