トップページ⇒tech
1001コメント402KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG?2BP(12)
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
 投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

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

【前スレ】
C/C++の宿題を片付けます 76代目
http://pc8.2ch.net/test/read.cgi/tech/1162771475/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
0286デフォルトの名無しさん2006/11/25(土) 14:56:08
>>285
あんた馬鹿?
0287デフォルトの名無しさん2006/11/25(土) 15:13:23
[1] 授業単元:プログラミング
[2] 問題文:2つの最大40桁の自然数を読み込み、その和を返すプログラムを作れ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名: gcc
 [3.3] 言語: C
[4] 期限:来週の木曜日(11月30日)まで
[5] その他の制限:構造体、ポインタを軽くならったところです。
    入力は文字列で行い、それを型変換し計算するという流れになるかと思いますが、
  文字列の扱いに困っております。
0288デフォルトの名無しさん2006/11/25(土) 15:37:05
>>287
以前 fj に似たようなのが流れてたなぁと思って検索したら出てきた。
ttp://katsu.watanabe.name/ancientfj/article.php?mid=%3C784lk3%245t%241%40news1.dti.ne.jp%3E
0289デフォルトの名無しさん2006/11/25(土) 15:42:25
>>287
適当に書いてみた。
#include<stdio.h>
#include<string.h>
void std_reverse(char*begin,char*end){
    char c;while(begin != end && begin != --end)c=*begin,*begin++=*end,*end=c;
}
char*my_strrev(char*p){std_reverse(p,p+strlen(p));return p;}
int main(void){
    char a[41]={0},b[41],c,*p=a,*q=b;
    scanf("%s%s",a,b);
    my_strrev(a);my_strrev(b);
    for(c=0;*p||*q||c;c=*p > '9',*p++ -= c * 10)
        *p = (*p?*p:'0') + (*q?*q++-'0':0) + c;
    puts(my_strrev(a));
    return 0;
}
0290デフォルトの名無しさん2006/11/25(土) 15:46:24
>>286 はぁ?具体的に示してみろよ。
0291デフォルトの名無しさん2006/11/25(土) 16:10:21
>new[strlen(new)] = '\0'; もしくは
少なくともこれは全く無意味だな。
0292デフォルトの名無しさん2006/11/25(土) 16:12:14
もしくはの意味わかるか?
0293デフォルトの名無しさん2006/11/25(土) 16:18:22
>>292
もしかして、真偽値を確かめてから偽なら後を実行するというアレか!?
0294デフォルトの名無しさん2006/11/25(土) 16:18:59
実験まで強要するとは憎いやつじゃ
0295デフォルトの名無しさん2006/11/25(土) 16:39:42
>>292
その文脈でもしくはと書く以上、

:私にはどちらを依頼人が望んでいるかは分からないが、
:依頼人の望む動作は A と B のどちらかであるように私には思える。

と解釈するのが常識的であって、つまり本人は A にも B にも意味があると
思っていると判断されて当然では。

逆に、私はわざとやったとは考えてないが、もし本人が、一方は全くのハズレで
意味がないと重々承知した上でわざとこのように書いたのなら、その軽重は
別として、相手を混乱させてやろうといった意思があったことになるのでは。
0296デフォルトの名無しさん2006/11/25(土) 16:49:59
問題 「もしくは」を使って文章を作りなさい

回答 彼は頼もしくはない
0297デフォルトの名無しさん2006/11/25(土) 18:10:21
>>286
 オナニーはひとりで汁
0298デフォルトの名無しさん2006/11/25(土) 18:14:00
>>297
まぁ、みせっこもたまにはいいよね
0299デフォルトの名無しさん2006/11/25(土) 18:23:13
[1] 授業単元: 応用プログラミング
[2] 問題文(含コード&リンク): ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3036.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 2006年11月26日20時00分まで
[5] その他の制限: 問題で与えられたソースを元にせよという指示がありました。
よくわからない部分は全力で調べるのでよろしくお願いします
0300デフォルトの名無しさん2006/11/25(土) 18:27:52
[1] 授業単元: プログラミング�T
[2] 問題文:
文字列と数字を与え、文字列の長さが数字より大きいかどうかを判定し、
その後に文字列の長さがどれだけ数字より大きいかを求めて表示するようなプログラムを作成せよ。
文字列の長さの方が小さい場合は何もせず終了せよ。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名: gcc
 [3.3] 言語: C
[4] 期限: 11/29まで
[5] その他の制限: まだ始めたばっかなんで全然わかりません。
0301デフォルトの名無しさん2006/11/25(土) 18:32:14
ポインタがわからないんだが、どうすればいい?
スレ住人おすすめの本かサイトを教えてくれ。
0302デフォルトの名無しさん2006/11/25(土) 18:33:48
>>301
brainf*ckがいいんじゃないか?
ぐぐってみろ
0303デフォルトの名無しさん2006/11/25(土) 18:42:40
[2] 問題文:
受け取った引数xの全桁の合計値を返す関数
int sum_dgt(int x) {/* */} を作り実行しなさい。
例えばx=234のときは9となる。(正の整数とする)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名: gcc
 [3.3] 言語: C
[4] 期限: 11/28まで

おねがいします
03042812006/11/25(土) 18:43:33
>>284
はい、そういうことです。

>>283氏と>>285氏のレスで解りました。
ありがとうございます。

ただ、>>285氏の
>fopen() 直後のfgetは余計
というので、なぜfopen() 直後のfgetが必要ないのかは、
いまいち解りませんが。
03051512006/11/25(土) 19:19:11
>>277
点数が4で
辺数が3のグラフって閉路がなくないですか?
0306デフォルトの名無しさん2006/11/25(土) 19:21:44
もう151は来るな
死んでくれ
03071512006/11/25(土) 19:23:17
暴言吐いていたのは自分じゃないですよ。それは信じて下さい
0308デフォルトの名無しさん2006/11/25(土) 19:24:06
>>307
わかっているさ
0309デフォルトの名無しさん2006/11/25(土) 19:24:11
どこ大?
俺より下だったら答えてあげる
03101512006/11/25(土) 19:29:11
慶應です。
0311デフォルトの名無しさん2006/11/25(土) 19:30:13
俺ポン大なんだよね
死ねよKO
03121512006/11/25(土) 19:31:58
310は自分じゃないです。あーなんでこんなに偽物が・・・
慶應ではないです
特定されると嫌なので書きたくないですが、慶應よりは下です
0313デフォルトの名無しさん2006/11/25(土) 19:32:29
俺は苦労してポン大しか入れなかったというのに
ボンボンというだけで慶應に入って
おまけに卒業に必要な単位は他人任せか
腐れ外道が
03141512006/11/25(土) 19:36:09
日大って猿でも受かるんじゃないんですか?
幼稚舎にいた頃、アルバイトで来ていた日大の学生さんを見て、日大はお猿さん養成所も同然だと母が言ってましたが。
0315デフォルトの名無しさん2006/11/25(土) 19:37:44
どれかひとつぐらいは
こっそり本人が書いたんじゃないかと思えてきたよw
0316デフォルトの名無しさん2006/11/25(土) 19:40:38
NG推奨名前:151
0317デフォルトの名無しさん2006/11/25(土) 19:42:29
>>312
信じてるよ
0318デフォルトの名無しさん2006/11/25(土) 19:43:37
>>317
俺も信じてるよ
0319デフォルトの名無しさん2006/11/25(土) 19:44:17
内容:
[1] 授業単元:情報処理工学1
[2] 問題文(含コード&リンク): 下記
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:VC++
 [3.3] 言語: C++
[4] 期限: 明日まで
[5] その他の制限:

class Vector{
public:
void f(){cout << "f()" << endl;}
};

int main(){
vector<Vector*> vec;
Vector *v;
for(int i = 0; i < 10; i++) { v = new Vector; vec.push_back(v); }
for(vector<Vector*>::Iterator i = vec.begin(); i < vec.end(); i++)
i.***->f();
}

というプログラムを作ってるんですが、動的にクラスを確保して、それを次々にvectorに格納して、最後に表示をするっていうふうにしたんです。
ですが、***の部分をどうやったらいいのか、わかりません。クラスではなく、整数であれば、i をそのまま使えばいいんですけど、クラスだとうまくいきません。
どうしたらいいでしょうか??
0320デフォルトの名無しさん2006/11/25(土) 19:44:26
どうでもいいがとりあえず今未解決の課題はどれだけあるんだ
前スレのは知らんがこのスレのを消化していこうぜ
下らん流れはさっさと断ち切るに限る
0321151 ◆nEYxVzEafI 2006/11/25(土) 19:46:59
今更遅いかもしんないっすけど、トリップつけます
0322デフォルトの名無しさん2006/11/25(土) 19:50:26
>>90
>>93
>>151
>>274
>>276
>>299
>>300
>>303
>>319

未解決課題
0323デフォルトの名無しさん 2006/11/25(土) 19:50:57
>>303
//受け取った引数xの全桁の合計値を返す関数
int sum_dgt(int x)
{
int digit = 1;
int sum = 0;
int i ;
int xx ;
int xxx = x;

for(i = 1; x > 1 ;i++){
x /=10;
digit *= 10;
}
for(;digit > 0; digit/=10){
xx = xxx;
xx /= digit;
sum += xx;
xxx-=xx*digit;
}
return sum;

}
0324151 ◆nEYxVzEafI 2006/11/25(土) 19:51:59
>>322
自分のも含めて頂いてありがとうございます。てっきりスルーされると思いました。
0325デフォルトの名無しさん2006/11/25(土) 19:53:32
>>90 (今日中)
>>151 (今日中)
>>274 (29日まで)
>>276 (今日の23時まで)
>>299 (明日の20時まで)
>>300 (29日まで)
>>319 (明日まで)

期限切れを消しといた
0326デフォルトの名無しさん2006/11/25(土) 19:54:32
みんな期限迫りすぎだろw
もっとゆとりを持って依頼に来てくれよw
0327151 ◆nEYxVzEafI 2006/11/25(土) 20:00:24
>>325
来週の水曜日までOKになりました
0328デフォルトの名無しさん2006/11/25(土) 20:02:12
↑>>276 (今日の23時まで)
│>>90 (今日中)
│>>299 (明日の20時まで)
│>>319 (明日まで)
↓>>151 >>274 >>300 (29日まで)

まあまったり待てや
0329デフォルトの名無しさん2006/11/25(土) 20:03:38
>>90はファイルがもうないから消していいと思われ
0330デフォルトの名無しさん 2006/11/25(土) 20:06:56
>>300
#include <stdio.h>
#include <string.h>
//'\0'は数えないものとする
void Compar(int x, char s[])
{
unsigned int len;

len = strlen(s);
if(x <= len)
printf("文字の長さと数値の差は%d \n",len - x);
else
return;
}
0331デフォルトの名無しさん2006/11/25(土) 20:09:00
↑>>276 (今日の23時まで)
│>>299 (明日の20時まで)
│>>319 (明日まで)
↓>>151 >>274 (29日まで)
0332323,3002006/11/25(土) 20:10:57
すぐ出来るやつだけやった。
0333名無しさん2006/11/25(土) 20:13:47
現在、WindowsXP Pro+ VS2005 Proを使って開発中です。

1を入力されるとIMEがONになって、'あ' と表示するプログラムの作成中です。
以下のコードではIMEがONになってくれなくて、'a' と表示されます。
ご指摘お願いします。

void fnConvert(MSG *pMsg)
{
static int iCnt= 1;

if( (pMsg->wParam == 0x31) && (pMsg->message == WM_KEYDOWN) )
{
pMsg->wParam= 0x41;
break;
}
}
0334デフォルトの名無しさん2006/11/25(土) 20:14:23
お疲れ。
俺は274でもやるか
本人降臨してほしいが
0335デフォルトの名無しさん2006/11/25(土) 20:17:01
C++ってインスタンスじゃなくクラスを確保するんだ
0336デフォルトの名無しさん2006/11/25(土) 20:18:32
>>326
しかし宿題出された瞬間にここに出されても萎えるという
0337デフォルトの名無しさん2006/11/25(土) 20:33:21
>>299
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3037.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3038.c
0338デフォルトの名無しさん2006/11/25(土) 21:03:07
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): あるテキストファイルに含まれるA〜Zの個数をカウントするプログラムをつくれ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: lcc
 [3.3] 言語: C
[4] 期限: 11月28日まで
お願いします。どう検索すればいいかも分からないので教えていただきたいです。
答えがほしいですが、ヒントをいただければ自分でも努力はします。


0339デフォルトの名無しさん2006/11/25(土) 21:05:42
>>338
fgetc()を使ってEOFになるまで一文字ずつ読み込み、isalpha() && isupper()が
真になる時に配列count[26]のうち対応する文字のカウントを+1する。
0340デフォルトの名無しさん2006/11/25(土) 21:15:57
>>338
質問されても面倒なので答えを書いておく

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

int main(void)
{
int chr[26] = {0}, c, i;
FILE *fp;

if ((fp =fopen("count1.c", "r")) == NULL) /* ファイル名は適宜変更 */
exit(1);

while ((c = fgetc(fp)) != EOF)
if (isalpha(c) && isupper(c))
chr[c - 'A']++; /* Windows上で動かす事を前提とする */

for (i = 0; i < 26; i++)
printf("%c : %dcount(s)\n", i + 'A', chr[i]);

return 0;
}
0341デフォルトの名無しさん2006/11/25(土) 21:16:38
あ、最後にfclose(fp); してから return 0; しといてね
0342デフォルトの名無しさん2006/11/25(土) 21:23:57
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): テキスト(英文)を読み込んで単語を全て取り出し、重複する単語は1つにまとめ、その単語がいくつあったかabc順に並べて表示するプログラムを書きなさい。(.,"などは含まない)
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] lcc
 [3.3] 言語:C
[4] 期限:2006年11月26日24:00まで
プログラミング初心者です。申し訳ありませんがどなたかお願いします。
0343デフォルトの名無しさん2006/11/25(土) 21:26:08
>>340に補足
#include <stdio.h>
#include <ctype.h>
#define NUMBER 26
main(int argc, char **argv){FILE *fp; int i, c, chr[NUMBER]={0};
if((fp=fopen(argv[1],"r")) == NULL) puts("need 1 parameter");
else {
while ((c=fgetc(fp))!=EOF) if (isalpha(c)) chr[toupper(c)-'A']++;
fclose(fp);}

for (i=0; i<NUMBER; i++) printf("%c: %3d time%s\n",i+'A',chr[i], chr[i]>1?"s":"");
getchar();return 0;}
0344デフォルトの名無しさん2006/11/25(土) 21:26:55
>>342
ていうか、K&Rもんばっかだな
03452872006/11/25(土) 21:30:50
>>288
ありがとうございます。が、なんか文字化けしちゃって私の環境では見れませんね・・・
わざわざ張ってくださったのに申し訳ないです

>>289
これはこれは、わざわざ作ってくださってありがとうございます
しかし私のポインタの知識が未熟なせいか、今現在はまだ読み解けない部分がありますね
けれども、これはとても参考になります。ほんとにありがとうございました
0346デフォルトの名無しさん2006/11/25(土) 21:32:33
>>345
base64知らないのか
0347デフォルトの名無しさん2006/11/25(土) 21:41:19
ランディ・バースは44番
0348デフォルトの名無しさん2006/11/25(土) 21:50:50
聞いてねぇーよ
0349デフォルトの名無しさん2006/11/25(土) 21:54:34
ごめん俺が聞いたんだ。
ホント悪かった。
0350デフォルトの名無しさん2006/11/25(土) 21:55:31
↑>>276 (今日の23時まで)
│>>319 >>342 (明日まで)
↓>>151 >>274 (29日まで)

未解消
03512872006/11/25(土) 21:58:09
>>346
すみません知りませんでした
一応ググって復元してみたら無事プログラムソースを見ることができました
お手数かけまして申し訳ありません
0352デフォルトの名無しさん2006/11/25(土) 22:00:19
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
y=sin2x*cosx(0≦x≦π/4)をgnuplotで図示せよ。
gnuplotの関数表示機能は使わず、C言語でプログラムを組んで、その出力
データをgnuplotで読み込んで図示させること。刻み数は1000とする。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 来週の火曜日の20時までです。
[5] その他の制限:特になし。
出力データをファイルに書き込み、gnuplotでそのファイルを読み込み
グラフを表示させる、といことです。
よろしくお願いします。
0353デフォルトの名無しさん2006/11/25(土) 22:05:28
ところでいつか丸投げされてた遺伝的アルゴリズムの問題解こうと思うんだが
俺遺伝的アルゴリズムやったことないんだ

計算結果はdoubleで返すことを期待されてると思うんだが
double型にビット演算ってできないよな?
何か良いアイデア知ってる火といないかな
0354デフォルトの名無しさん2006/11/25(土) 22:07:25
>>319
class Vector {
public:
void f(){ std::cout << "f()" << std::endl; }
};

int main()
{
std::vector<Vector*> vec;
Vector *v;
for (int i = 0; i < 10; i++) {
v = new Vector;
vec.push_back(v);
}
for (std::vector<Vector*>::iterator i = vec.begin(); i < vec.end(); ++i)
(*i)->f();
}
0355デフォルトの名無しさん2006/11/26(日) 00:15:05
>>352
gnuplotに読み込ますデータの仕様くらい用意してから書き込めよ。
0356デフォルトの名無しさん2006/11/26(日) 00:16:38
>>353
つ union
0357デフォルトの名無しさん2006/11/26(日) 00:40:25
>>356
お こんな要素があったのか バッチリだな
ありがとう
03583522006/11/26(日) 00:55:37
>>355
すいません、
>gnuplotに読み込ますデータの仕様くらい用意してから書き込めよ。
というのは、出力データをどんな感じでファイルに書き込むか、という
ことですか?
xiとyiとしたら
0.0000 0.14356
0.0100 0.16344
. .
. .
. .
という感じです。
0359デフォルトの名無しさん2006/11/26(日) 01:05:49
>>352
#include<stdio.h>
#include<math.h>

#define N 1000

double f(double x){
return sin(2*x)*cos(x);
}

int main(void){
double x, dx=(M_PI/4)/N;
int i;

for(i=0;i<=N;i++){
x=i*dx;
printf("%f %f\n", x, f(x));
}

return 0;
}
0360デフォルトの名無しさん2006/11/26(日) 02:23:49
greeting all:

excuse me for writing in English, i haven't installed japanese IME
so i can't type in japanese

i'm working on my project in my computer science class and
found a very interesting result. that is recursive merge-sort
function is faster than non-recursive version.

i posted the same question on cprogramming.com so that
the details and my source code is provided at
http://cboard.cprogramming.com/showthread.php?p=612918#post612918
03613532006/11/26(日) 04:03:12
うん 出来たっぽい

さすがに人に見せられるレベルじゃないのでもう少し手を入れるが
もし締め切りが近かったらアレなので89はまだいたら締め切り示せ
03622282006/11/26(日) 06:42:23
>>228 訂正
コンパイラ名とバージョン:VC 6.0
で未解決なのでお願いします
0363その12006/11/26(日) 09:13:28
>>89
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <float.h>
#include <math.h>
#define N 500//世代内の個体数
#define G 1000//最大世代数
#define Kousa 0.5//交差率。0〜1
#define Totuzen 0.1//突然変異率。0〜1だが小さめに設定すること
#define Pi 3.14159265358979


union uGENE
{
int i[2];
double d;
};

double hyouka (double x);
void kousa(int *a,int *b);
void mutation(int *a,int *b);
int mycomp(const void *_a, const void *_b);
int choice(int i);
0364その22006/11/26(日) 09:14:14
void main(void){
int g,i;
union uGENE future[N+1];
double r,present[N];
srand((unsigned) time(NULL));
for(i=0;i<N;i++) present[i]=3.0*((double)rand()/RAND_MAX)-1.0;
for(g=0;g<G;g++){
printf("%d世代目計算中・・・\n",g);
qsort(present, N, sizeof(double), mycomp);

for(i=0;i<N;i++) {
r = (double)rand()/RAND_MAX;
future[i].d=present[choice(i)];
if(r<Kousa){
//交叉
future[i+1].d=present[choice(i+1)];
kousa(future[i].i,future[i+1].i);
kousa(future[i].i+1,future[i+1].i+1);
i++;
}
else if(r<Kousa+Totuzen){
//突然変異
mutation(future[i].i,future[i].i+1);
}
//何もしなければコピーになる
}
//世代交代
for(i=0;i<N;i++) present[i]=future[i].d;
}
qsort(present, N, sizeof(double), mycomp);
printf("x=%fの時f(x)は%f",present[0],hyouka(present[0]));
}
0365その32006/11/26(日) 09:15:20
//評価関数。xが定義域に無い時はマシンエプシロンを返す。
//評価関数はx{sin(10πx)}+2cos(10πx)+1.0をそのまま用いるが
//0以下の場合はマシンエプシロンの10倍を返す。

double hyouka (double x){
if(x<-1||x>2) return DBL_EPSILON;
double y,tmp;
tmp=10.0*Pi*x;
y=x*sin(tmp)+2*cos(tmp)+1.0;
if (y<=0) return DBL_EPSILON*10;
else return y;
}

//交叉関数。一様交叉を行う
void kousa(int *a,int *b){
//交叉するビットを示すマスクを作る
unsigned int mask=0;
//マスクの各ビットにランダムに0/1を入れる
for(int i=0;i<32;i++){
mask+=rand()%2;
mask<<=1;
}
//aとbで内容が同じビットは交叉する必要がない
mask=mask&(*a^*b);
*a^=mask;
*b^=mask;
}
0366その42006/11/26(日) 09:16:00
//突然変異関数。どこか1ビットをランダムに反転させる。
void mutation(int *a,int *b){
unsigned int mask=1;
int r=rand()%64;
if(r>=32){
r-=32;
mask<<=r;
*a^=mask;
}
else{
mask<<=r;
*b^=mask;
}
}

int mycomp(const void *_a, const void *_b)
{
double a = *(double *)_a;
double b = *(double *)_b;
double tmp=hyouka(b)-hyouka(a);

if (tmp<0) {
return -1;
} else if (tmp > 0) {
return 1;
} else {
return 0;
}
}
0367その52006/11/26(日) 09:20:36
int choice(int n){
//エリート選択
if(n==0||n==1) return n;
//投げやりなランキング選択
for(int i=0;i<N-1;i++){
if(rand()%2==0) return i;
}
return N-1;
}


これで終了。
作っておいてなんだがそんなに性能良くない。

とりあえず交叉の元になる個体に同じ物が二つ選ばれるというバグ(笑)があるので
取り除いたらもう少し性能が良くなると思います。(直すつもりだったのに忘れてた)

あとchoice関数を物凄い適当に作ってあるんでここらをいじっても良くなるはず。
やる気があったら改良するかも。
0368デフォルトの名無しさん2006/11/26(日) 09:37:26
ああ、バグ直したら大分性能良くなった
まあこれくらいは自力でやって
0369デフォルトの名無しさん2006/11/26(日) 09:50:29
[1] 授業単元:計算科学
[2] 問題文
連続な値をとる確率変数Yp_ _ _ _,Ynが独立同分布(iid)
p(x)=1( 0≦x <1)
p(x)=0(それ以外)
に従うとしよう. double get_uniform_random() そのままですね.
連続な値をとる確率変数Xnを Xn=(1/N)×(Y1+…+Yn) で定める.
N?
1000
サンプル数?
100
シード?
128478
と入力すると, X1000のサンプルを100個生成して,
# N X_Nのサンプル平均 X_Nのサンプル分散
1000 0.502346 0.000868
と出力するプログラムを作ってください。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio.NET2003
 [3.3] 言語: C
[4] 期限: 2006年11月28日09:00まで
0370デフォルトの名無しさん2006/11/26(日) 10:21:44
342どなたかお願いします。時間がありません…
0371デフォルトの名無しさん2006/11/26(日) 10:40:21
Cかぁ、面倒くさいな
0372デフォルトの名無しさん2006/11/26(日) 10:45:33
お願いします(><)
0373デフォルトの名無しさん2006/11/26(日) 10:53:04
>>370
まだ13時間あるよ
0374デフォルトの名無しさん2006/11/26(日) 11:56:05
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
3つの整数を各辺の長さとして、その3つの辺の組が
(1)正三角形を出力できるなら「equilateral triangle」と出力し、
(2)(一般的な)三角形が形成できるなら「triangle」と出力し、
(3)三角形が形成できなければ「not triangle」と出力する
 プログラムを作成せよ。
 もし可能ならば、上の条件に加えて
(4)直角三角形を形成できるなら「right-angled triangle」と出力し、
(5)二等辺三角形を形成できるなら「isosceles triangle」と出力し、
(6)三角形を形成できるならばその面積Sを出力するプログラムを作成せよ。
例:
4,4,4・・・equilateral triangle (S=6.928)
6,5,7・・・triangle (S=14.697)
6,2,2・・・not triange
ヒント:
3つの整数をa,b,cとすると、三角形を形成する条件は、|b-c|<a<b+c
面積Sはへロンの公式より、s=(a+b+c)/2とするとS=(s(s-a)(s-b)(s-c))^1/2
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2006年11月28日16:00まで
どう考えてもわかりません。どうかお願いします。
0375デフォルトの名無しさん2006/11/26(日) 12:36:38
>>370
英文テキスト名は指定されている?
0376デフォルトの名無しさん2006/11/26(日) 12:57:11
>>370
というか英文の仕様が無いと作りづらいかも。
・英文中に出てくる記号は",(カンマ)" ".(ピリオド)"" (空白)"のみ?
 ":(コロン)"とかは出てこない?
・改行は分離子と見なしていい?例えば
 I am progr
 ammer
 という文ならprogrammerを単語とみなすのか?
 progrとammerをそれぞれ単語とみなすのか?

0377デフォルトの名無しさん2006/11/26(日) 14:28:18
>>337
ありがとうございます。
コンパイルする際にエラーが出ましたが、なんとか頑張って修正してみます。
0378デフォルトの名無しさん2006/11/26(日) 14:30:37
>>370
つーか全く同じ問題が前スレか前前スレで解答されてた気がするんだわ
03793522006/11/26(日) 14:34:20
>>359
解答ありがとうございます。
359さんが作って下さったプログラムについて、少し疑問があるのですが…。
課題の前の説明に「刻み数を小さくすれば実際の曲線に近いデータになる。」
と書いてあるのですが、352さんが作って下さったプログラムの場合だと、
刻み数を大きくすればする程、出力する数も増えて、実際の曲線に近い
データになるような気がするのですが…。
自分自身が刻み数というものを何か解ってなく、現在、学校じゃないので
gnuplotを使用できないというのもあって、実際は、どうなの解りませんが
疑問に思ったので。
0380デフォルトの名無しさん2006/11/26(日) 14:45:14
>>379
>課題の前の説明に「刻み数を小さくすれば実際の曲線に近いデータになる。」

本当にそう書いてある? 刻み「幅」を小さくすれば、なら納得いくのだけど。
0381デフォルトの名無しさん2006/11/26(日) 15:02:30
>>370 これでおk?
75代目
730 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/03(金) 21:14:44
>>727
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2871.c
0382デフォルトの名無しさん2006/11/26(日) 15:20:25
>>376
英文はなんでもよいそうです。
英文にでてくる文字の中で単語のみを抜き出すプログラムです。
英文中に出てくる記号は",(カンマ)" ".(ピリオド)"" (空白)"":(コロン)"";(セミコロン)"です。  
・改行は分離子と見なしてよいそうです。
03833792006/11/26(日) 15:50:27
>>380
はい、課題の前の説明には「刻み幅」と書いてあります。
「課題には刻み数は1000とする。」と書いてあります。
刻み数=刻み幅と思っているのですが違うのですか?
違うなら刻み数と刻み幅はどう違うのでしょうか?
0384デフォルトの名無しさん2006/11/26(日) 15:55:04
↑
どこのアホだよ、わからないことを紙に書いて
整理してから書き込めばわかることだろ。
馬鹿は馬鹿なりのプログラムの書き方ってのがある、
それすらしない奴はもしかして自分の頭だけで
物事全て考えられると思ってるのか?
そういうのって思い上がりだよ。
0385デフォルトの名無しさん2006/11/26(日) 15:56:42
>>381
それ1行に1単語とか制約つきじゃまいか?
■ このスレッドは過去ログ倉庫に格納されています