[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 03/18 16:48 / Filesize : 222 KB / Number-of Response : 573
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2007/11/05(月) 20:38:18 ]
あなたが解けない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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

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

【前スレ】
C/C++の宿題を片付けます 97代目
pc11.2ch.net/test/read.cgi/tech/1193150915/

152 名前:イトキン ◆lq89E2SwMI [2007/11/09(金) 15:10:24 ]









[3] 環境
 [3.1] OS: mac OS
 [3.2] わかりません
 [3.3] 言語: C言語のみ
[4] 期限: 12月5日
[5] その他の制限: mmapは使用禁止 
         スペシャルファイルでなく、イメージファイル上の動作でok
         二重間接まで動作チェックせよ。

Cのみで350行程度でかけるみたいです。

問題文、が長過ぎて、何をここに書けばいいのかまよってしまいました。
問題について聞きたいことがあれば、レスお願いします。



153 名前:デフォルトの名無しさん [2007/11/09(金) 15:40:01 ]
期限過ぎてもいいんで、誰か143お願いします。

154 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 16:16:37 ]
>>143
//ボックス=ミューラー法で100個の正規乱数を生成するテスト
#include<iostream>
#include<math.h>
#include<stdio.h>
#include<time.h>

int main()
{
    int i;
    double u1,u2,n1,n2;
    srand(time(NULL));
    for(i=0;i<50;i++){
        u1=(double)(rand())/RAND_MAX;
        u2=(double)(rand())/RAND_MAX;
        n1=sqrt(-2*log(u1))*sin(2*M_PI*u2);
        n2=sqrt(-2*log(u1))*cos(2*M_PI*u2);
        std::cout <<n1<<" "<<n2<<std::endl;
    }
    return 0;
}

155 名前: ◆a3LMU3qR26 [2007/11/09(金) 16:36:08 ]
1] 授業単元:アルゴリズム
[2] 問題文:巡回セールスマン問題を解くプログラムを作成しなさい。
今回は、あらゆる場合を全通り調べる方法で解を求めるプログラムでかまいません。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: (gcc
 [3.3] 言語: Cのみ
[4] 期限: できるだけ早く
[5] その他の制限: たいていあり




156 名前: ◆a3LMU3qR26 [2007/11/09(金) 16:38:30 ]
>>155ですけど
for(i = 0; i < n; i++) used[i]=NO;
perm(0);
return(0);
}
void perm(int d)
{
int i,j;
int b[MAXN];
int s = adj[a[0]][a[n-1]];

if(d == n){
for(i = 0; i < n-1; i++){
s+=adj[a[i]][a[i+1]];
}
}

else {
for (i = 0; i < n; i++) {
if (used[i] == NO) {
a[d] = i;
used[i] = YES;
perm(d + 1);
used[i] = NO;
}
}
}
}
このプログラムを利用したいのですが
これだけだとただの列挙になってしまいます
最小値だけをだすにはどうしたらいいでしょうか?

157 名前:153 [2007/11/09(金) 18:46:49 ]
>>154
ありがとうございます。
できれば、マイナスの値が出ないようにしていただきたいんですけど、無理ですか?

158 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 18:54:49 ]
でてきた正規分布を正軸に好きなだけ平行移動させりゃいいじゃん
分散は変わらないから形は変わらないだろ

159 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 18:56:06 ]
形っていうのは乱数の母集団分布な

160 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 19:25:13 ]
何故マイナスの値を出さないようにしたいのか?その理由気になる。



161 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 19:30:40 ]
>>106-107
順番がきましたら、こちらもよろしくお願いします。
期限は日曜日までありますので、土曜日が期限の人を優先していただいて構いません。
正確な期限は11/11(日) PM5時までです。
よろしくお願いします。

162 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 20:50:23 ]
>>106>>161
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5236.c
期限や順番なんて関係無いよ。答える奴は自分がやりたい問題をやるだけ

163 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 21:33:34 ]
[1] データ構造
[2] 問題文(含コード&リンク):
n個の頂点からなるグラフを、辺の両端の頂点に同じ色を塗らないようにし、すべての頂点を彩色するのに必要な色数を最小化する。
また、頂点iに接続する辺の数を頂点iの次数とよぶ。以下のアルゴリズムで作るように。
(1)
@頂点の次数を降順にソートする。
A頂点1に色1を割り当てる
B頂点i=2、...nについて、隣接する頂点に割り当てられていない最小の色番号を頂点iに割り当てる。

(2)頂点iの隣接頂点に彩色された異なる色数を頂点iの飽和次数とする。
@最大次数の頂点に色1を割り当てる
A飽和次数が最大の頂点を選ぶ。そのような頂点が複数ある場合は、
未彩色の部分グラフにおいて最大次数の頂点を選ぶ。
B選んだ頂点に彩色可能な最小の色番号を割り当てる
C全頂点が彩色済みならば終了。そうでないならAにもどる。
[3] 環境
 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C
[4] 期限: 2007年11月10日24:00まで(出来れば21:00
[5] その他の制限:
関数と変数の定義
#include <stdio.h>

#define TRUE 1
#define FALSE 0
#define MAX_N 2000
/*変数*/
int n; /*頂点数*/  int m; /*辺数*/
double x[MAX_N],y[MAX_N]; /*各頂点の座標*/
int a[MAX_N][MAX_N]; /*隣接行列*/
int color[MAX_N]; /*色*/
int max_color; /*最大の色番号*/

164 名前:163 mailto:sage [2007/11/09(金) 21:34:07 ]
問題例データの読み込み
input_fire = fopen(argv[1],"r");
fscanf(input_fire,"%d %d\n",&n,&m); /*頂点数と辺陬の読み込み*/
for(i = 0;i < n;i++){
fscanf(input_file,"%1f %1f\n"&(x[1]),&(y[i])); /*頂点データの読み込み*/
}
for(i = 0;i < n;i++){ /*隣接行列の初期化*/
for(j = 0;j < n;j++){
a[i][j] = 0;
}
}
for(i = 0;i < m;i++){
fscanf(input_file,"%d %d\n",&k1,&k2); /*辺データの読み込み*/
a[k1][k2] = a[k2][k1] = 1; /*隣接行列の生成*/
}
for(i = 0;i < n;i++){
color[i] = -1; /*解の初期化*/
}

説明文に意味がわからないところがあったらご指摘ください。お願いします。

165 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 21:52:39 ]
>>164
でーんつーだーい

166 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 22:25:47 ]
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5237.txt

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

よろしくお願いします

167 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 22:35:03 ]
>>163
それだと彩色数は最小化されないが

168 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 22:44:59 ]
>>167
これ、近似アルゴリズムだから。


169 名前:デフォルトの名無しさん [2007/11/09(金) 22:46:25 ]
#include <stdio.h>
#include <math.h>

double f(double x){
return 1/sqrt(1+pow(x,4)); /*求める定積分*/
}


int main(void){
double x,sum=0,h;
printf("h:"); scanf("%lf",&h);

for(x=2*h;x<1;x+=2*h){ /*範囲指定*/
sum+=(f(x) + 4*f(x-h) + f(x-2*h)) * h/3; /*シンプソンの公式*/
printf("%f %f\n",sum,x);

}
}

170 名前:デフォルトの名無しさん [2007/11/09(金) 22:47:19 ]
for(x=0;x<1-2*h;x+=2*h){ /*範囲指定*/
sum+=(f(x) + 4*f(x+h) + f(x+2*h)) * h/3; /*シンプソンの公式*/
printf("%f %f\n",sum,x);



171 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 23:07:34 ]
>>162
>>答える奴は自分がやりたい問題をやるだけ
と言いつつプログラム作ってくれた>>162さんに感謝。自分の課題解いてくれてありがとうございます。
わざわざプログラムコード中に説明文まで入れてもらって本当に感謝しています。
m(_ _)m

172 名前:aho mailto:sage [2007/11/10(土) 01:06:59 ]
>>142
これ以外に何かあればいってちょ!
encrypt()内がちょっと汚いから書き直してね。
void encrypt(char** argv){
int tmp; //文字読み込みバッファ
FILE* fp = fopen(argv[2], "rb");
if(!fp){
printf("file open error!\n");
return;
}
FILE* fout = fopen(argv[3], "wb");

if(!strcmp(argv[1], "c")){ //暗号化
while((tmp = fgetc(fp)) != EOF){
if(tmp == 0x0A){ //改行コード
fputc(tmp, fout);
continue;
}
tmp += 0x01;
fputc(tmp, fout);
}
}
else if(!strcmp(argv[1], "d")){
while((tmp = fgetc(fp)) != EOF){
if(tmp == 0x0A){
fputc(tmp, fout);
continue;
}
tmp -= 0x01;
fputc(tmp, fout);
}


173 名前:aho mailto:sage [2007/11/10(土) 01:09:33 ]
>>172
}
fclose(fout);
fclose(fp);
}

int main(int argc, char** argv){
if(!strcmp(argv[1],"c") && !strcmp(argv[1],"d")){
printf("argument error!\n");
return 0;
}
encrypt(argv);

return 0;
}

もっと細かい引数のチェック(argcでも判断, 拡張子判断etc)もした方がいいかもね。
疲れたので寝ます

174 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 01:14:06 ]
>>172-173

つ「>>144-145
まあ、作りが少し違う参考になるでしょ。

175 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 01:23:30 ]
[1] 授業単元: 確率論
[2] 問題文:
www.uploda.org/uporg1104561.txt
ここに書きました。
図はこんな感じです。
www.uploda.org/uporg1104531.jpg

[3] 環境
 [3.1] OS: LINUX
 [3.2] 言語: C
[4] 期限: 11月10日
[5] その他の制限: 特にありません
わかりにくいかもしれませんがお願いします。

176 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 01:31:02 ]
>>168
それはもちろん知っているが、問題の一行目には最小化すると書かれている

177 名前:153 mailto:sage [2007/11/10(土) 03:10:07 ]
>>176
このアルゴリズムでは最小化できないらしいので、アルゴリズムのほうを優先するみたいです。
よくみたら『この近似解法で作成せよ』と書いてありました。申し訳ございません。

178 名前:デフォルトの名無しさん [2007/11/10(土) 06:18:17 ]
誰かいますか?

179 名前:デフォルトの名無しさん [2007/11/10(土) 06:25:27 ]
います

180 名前:デフォルトの名無しさん [2007/11/10(土) 06:26:41 ]
イター!!!
お願いします俺の宿題やってくださいませ



181 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 06:28:07 ]
どれどれ。

182 名前:デフォルトの名無しさん [2007/11/10(土) 06:32:14 ]
ありがとうございます!!!!

えーと
数独の問題をグラフ彩色問題に変換せよ
ってもんだいなんですけど
どうやらこれをアルゴリズムで説明させる問題らしいんです


183 名前:デフォルトの名無しさん [2007/11/10(土) 06:38:08 ]
縦横と正方形に同じ数字が入ってはいけないっていうことだろう
数字をいろと言い換えればいいだけだろう

184 名前:デフォルトの名無しさん [2007/11/10(土) 06:40:27 ]
やっぱそれでいいんですよね!
俺もそれ以外に思い浮かばなくて・・・
数独アルゴリズムの数字を色って書き換えるだけでいいですよね?

185 名前:デフォルトの名無しさん [2007/11/10(土) 06:58:06 ]
解くアルゴリズムは作らないと行けないのか?

186 名前:デフォルトの名無しさん [2007/11/10(土) 07:01:30 ]
16個のヒントの物は作れるか?

最初にヒントとして配置する数字の数は、24〜32個程度が多く、これ以上だと解くのが簡単になる。
逆にそれ以下にするのは作者の技量も必要になってくる。
問題として成立する初期配置の数字の最少個数はまだ結論が出ていないが、
対称形の問題では18個(初出・パズル通信ニコリ31号 1990年)、
非対称の物では17個(初出・パズラー187号 1997年)のものが確認されている。
ja.wikipedia.org/wiki/%E6%95%B0%E7%8B%AC

187 名前:デフォルトの名無しさん [2007/11/10(土) 07:05:40 ]
解くアルゴリズムはググッてわかりました
ただ、彩色問題とからめた記述がなかったのでどうしようかとおもいまして・・

188 名前:デフォルトの名無しさん [2007/11/10(土) 07:06:38 ]
方針としては、縦か横か、正方形で可能な形を全て埋めてみるといいとおもう
例えば正方形の可能数は9! 通りある 9カ所埋めてみて縦が平気か調べていく

189 名前:デフォルトの名無しさん [2007/11/10(土) 07:14:21 ]
参考になりました!
こんな朝早くにありがとうございました

190 名前:デフォルトの名無しさん [2007/11/10(土) 07:24:27 ]
最大でも、9*9! とおりしかないから、全配置を決定しておいてから、初期配置を満たすものをサーチすればいいと思う

9 * (9 !) = 3265920だから解けているからどうかを記録するには3MBくらいだ



191 名前:デフォルトの名無しさん [2007/11/10(土) 07:26:18 ]
1行目が 123456789 だとすると、2行目には上の数字はこないから減らせる

192 名前:デフォルトの名無しさん [2007/11/10(土) 07:50:49 ]
1から9の順列を昇順に求めるプログラム

#include <iostream>
using namespace std;
main(){
int a,b,c,d,e,f,g,h,i,chk[9]={1,1,1,1,1,1,1,1,1},N=0;
char **jretu=new char* [9];
for(a=0;a<9;a++) jretu[a]=new char [362880];

for(a=0;a<9;a++){ chk[a]=0;
for(b=0;b<9;b++){ if(chk[b]==0)continue; chk[b]=0;
for(c=0;c<9;c++){ if(chk[c]==0)continue; chk[c]=0;
for(d=0;d<9;d++){ if(chk[d]==0)continue; chk[d]=0;
for(e=0;e<9;e++){ if(chk[e]==0)continue; chk[e]=0;
for(f=0;f<9;f++){ if(chk[f]==0)continue; chk[f]=0;
for(g=0;g<9;g++){ if(chk[g]==0)continue; chk[g]=0;
for(h=0;h<9;h++){ if(chk[h]==0)continue; chk[h]=0;
for(i=0;i<9;i++){ if(chk[i]==0)continue;
jretu[0][N]=a;jretu[1][N]=b;jretu[2][N]=c;jretu[3][N]=d;
jretu[4][N]=e;jretu[5][N]=f;jretu[6][N]=g;jretu[7][N]=h;jretu[8][N]=i;
N++;
}chk[h]=1;
}chk[g]=1;
}chk[f]=1;
}chk[e]=1;
}chk[d]=1;
}chk[c]=1;
}chk[b]=1;
}chk[a]=1;
}cout<<N;}

193 名前:デフォルトの名無しさん [2007/11/10(土) 08:03:31 ]
32bit変数に、3bitずつデータ入れていけば列に同じ数字があるかどうかはXOR演算で出来るな

194 名前:デフォルトの名無しさん [2007/11/10(土) 08:05:36 ]
やっぱり駄目だ 結局9回のループか演算(ifなど)がいるな

195 名前:デフォルトの名無しさん [2007/11/10(土) 08:09:10 ]
123456789
251498736
987654321
に縦方向に同一文字があるかどうかはどう判定する?

196 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 08:58:30 ]
>>182
演習問題1は、
>数独(ナンバープレイス) をグラフ彩色問題に変換せよ
だからアルゴリズムで説明させるってどういう意味?

>(a) あいているマスに1〜9 までのどれかの数字を入れる
>(b) 縦・横の各列および太線で囲まれた3 × 3 のブロックに同じ数字が入ってはいけない

(b)の定義を以下のように読み替える。
(1)3×3の小ブロック内のマスは全て異なる数字であること
(2)あるマスに対して、同じx、yを持つマスは全て異なる数字であること

特定のマス集合に所属するマスが全て異なる数字である事は、
任意のマスを一つ取り出した場合に、そのマス以外の他のマス集合に所属するマスと数字が異なるということと同じである。

これをグラフで表せば、それぞれのマスをグラフの頂点とした完全グラフにおいて、
任意の辺においてその両端の数値が異なることと同義である。
これはグラフ彩色問題の定義である。

というか、お前>>166だろ?演習問題2ぐらい自分でやれよ。

197 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 09:06:46 ]
ついでに、SEQまではとりあえずやってみて秋田。

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5238.txt
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5239.txt

DSATURは誰か頼む。

198 名前:デフォルトの名無しさん [2007/11/10(土) 09:11:44 ]
数独で16個の初期配置で解けるか調べるプログラム


199 名前:デフォルトの名無しさん [2007/11/10(土) 09:12:24 ]
問題として成立する初期配置の数字の最少個数はまだ結論が出ていないが、非対称の物では17個(初出・パズラー187号 1997年)のものが確認されている。
ja.wikipedia.org/wiki/%E6%95%B0%E7%8B%AC

200 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 09:21:51 ]
>>198
「問題として成立する」と「解けるか」は意味が違うだろ、常識的に考えて。

なんなら初期配置0個でも解けるぞ。



201 名前:198 [2007/11/10(土) 09:51:13 ]
>>200 解ける = 配置が一意的に求まる 解けている全配置を求めるプログラム書いたが 二つ目が出てこない 時間がかかりすぎる

#include <iostream>
using namespace std;
main(){
int G[9][9],R[9][9],S[9][9];
int x,y[81],m,n,l,d,cnt;

for(n=0;n<81;n++)y[n]=0;
for(m=0;m<9;m++)for(n=0;n<9;n++)G[m][n]=R[m][n]=S[m][n]=1;
d=cnt=0;

for(;;){
x=y[d]; m=d/9; n=d%9; l= 3*(m/3) + n/3;
if( G[m][x]+R[n][x]+S[l][x]==3 ){
if(d<80){G[m][x]=R[n][x]=S[l][x]=0; d++; y[d]=0;continue;}
cnt++;for(int k=0;k<81;k++){if(k%9==0)cout<<endl;cout<<y[k]<<" ";};d--;}

ST:
if(y[d]<8)y[d]++;
else{
if(d==0){cout<<cnt;return 0;}
d--;
x=y[d]; m=d/9; n=d%9; l= 3*(m/3) + n/3;
G[m][x]=R[n][x]=S[l][x]=1;
goto ST;}
}}

202 名前:198 [2007/11/10(土) 10:08:16 ]
回転や反転の同一視、数字の同一視などを考慮しても全解答を求めるのは困難そうだ
もし全配置が決定できれば、初期配置に対してそれを含む解答がただ一つがどうか調べるだけだ

203 名前:デフォルトの名無しさん [2007/11/10(土) 11:03:59 ]
*****
****
***
**
*

204 名前:203 [2007/11/10(土) 11:04:43 ]
投稿ミスですorz

205 名前:203 [2007/11/10(土) 11:14:23 ]
下の図形をfor文で作るのですが・・
よくわかりませんorz
*****
****
 ***
  **
  *

他スレでヒント貰ったのですが・・
俺の頭じゃ無理だったみたいです・・

206 名前:203 [2007/11/10(土) 11:15:26 ]
なんだか一個づれてますが
ピラミッド型です。。本当にすみません

207 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 11:24:40 ]
>>203
ピラミッドを作るなら各段'*'の数は奇数のような気が
偶数の段があると上手くいかないような
*******
 *****
  ***
   *

208 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 11:30:24 ]
>>205
#include <stdio.h>
int main()
{
int i,j;
for(i=5;i>0;i--){
for(j=0;j<5-i;j++)
printf(" ");
for(j=0;j<i;j++)
printf("*");
printf("\n");
}
return 0;
}

209 名前:203 [2007/11/10(土) 11:30:59 ]
宿題見る限りでは偶数も入ってるんですょね・・
多少いびつな形かもしれません

210 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 11:36:05 ]
>>209
すると、問題が不明瞭だな。「ピラミッド型」が未定義だ。
これまでの回答で満足できないなら問題をきちんと確認してこい。



211 名前:203 [2007/11/10(土) 11:37:17 ]
>208
ぉぉーー どうもです;;

212 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:00:34 ]
>>175
ですけどこれじゃあちょっとわかりにくいので
50回移動すると考えれば、考えやすいのかなと。

無制限にこの確率で移動してendにたどり着くことなんて無限にあるんじゃないかと
おもってしまった。

213 名前:デフォルトの名無しさん [2007/11/10(土) 12:55:04 ]
0は空マス これ何秒で解ける?

000 000 061
000 200 007
000 940 000
087 000 000
006 000 400
000 000 230
000 078 000
200 006 000
490 000 000

214 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 13:40:53 ]
542 783 961
839 261 547
761 945 823
387 524 619
126 839 475
954 617 238
615 478 392
278 396 154
493 152 786
1秒もかからんわ

215 名前:デフォルトの名無しさん [2007/11/10(土) 18:09:05 ]
[1] 授業単元:C言語
[2] 元のファイルslist.c: www.uploda.org/uporg1105430.txt.html
自分で途中まで作ったやつ:www.uploda.org/uporg1105431.txt.html
[3] 環境
 [3.1] OS:Linux (家ではWindowsでMinGW+MSYS+XEmacs)
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:11月14日
[5] その他の制限:特にないです
[問題文]
課題:slist.c の改良
1.print_person関数を単方向リストを辿るように変更せよ。(自分なりに解決済み)
2.次の機能を実装せよ。
 ・標準入力から一行ずつ名前と年齢を読み込む
 ・名前と年齢はカンマ(,)で区切る
  ・"foo,19"など
 ・単方向リストに格納して出力
3.その他(授業でヒント「単方向リストの反転」が与えられ、自分なりに解決済み)
[問題文終わり]
自分で作った方はperson_input()の中が全然できてません。
次に続きます。

216 名前:215 [2007/11/10(土) 18:11:48 ]
構造体に名前と年齢を標準入力して、単方向リストで出力をするプログラムを考えています。
標準入力の際に名前と年齢は「tanaka,20」のように一行にするよう指示されています。
ヒントとして以下が与えられました。

char buf[256] ;
char *name;
int age;

while (fgets (buf, sizeof(buf), stdin))
{
char *sep = rindex (buf, '\n');
if (!sep)
continue;
*sep = '\0';
sep = rindex (sep, ',');
if (!sep)
continue;
*sep = '\0';
name = buf;
age = atoi (++sep);
}
また使用している構造体pは
struct person {
char *name;
int age;
struct person *next;
};
です。このヒントを用いて一行の標準入力から適切に構造体に入れ、
単方向リストに格納するにはどうしたらいいでしょうか。
while文の中がややこしくて終了の仕方も分からないのでよろしくお願いします。

217 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 18:49:41 ]
>>212
無理

218 名前:163 mailto:sage [2007/11/10(土) 18:53:17 ]
>>197
ありがとうございます。
あと(2)のほうを、どなたかお願いします。

219 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 19:04:07 ]
誰かいますか?


220 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 19:14:21 ]
公にはいないことになっている



221 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 20:25:26 ]
数独ソルバー
www.ffconsultancy.com/dotnet/fsharp/sudoku/index.html

222 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 20:41:35 ]
>>192
char **jretu=new char* [9];
for(a=0;a<9;a++) jretu[a]=new char [362880];
となっているが
char jretu[9][362880];
とすればいいだけじゃないか?
というかこれは一体何をするプログラムなんだ。


223 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 21:07:51 ]
>char jretu[9][362880];
>とすればいいだけじゃないか?
やってみろw

224 名前:デフォルトの名無しさん [2007/11/10(土) 21:24:19 ]
等比数列の和を求めるソースを教えてください
初項a,公比r、項数nとする

225 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 21:26:13 ]
>>224
無能でも無能なりにテンプレを埋めてください

226 名前:デフォルトの名無しさん [2007/11/10(土) 21:32:28 ]
224です
教えてください(涙)

227 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 21:32:58 ]
>>225
折角このオレでも答えられそうな問題なのに、そうつれなくするなよ

>>224
>>1 に質問(しつもん)テンプレっていうのが書(か)いてあるから、よく読(よ)むんだよ
読(よ)めない漢字(かんじ)は辞書(じしょ)を引(ひ)くといいよ

228 名前:aho mailto:sage [2007/11/10(土) 21:34:14 ]
>>215
struct person{
char name[20]; //char*では'q'の影響を受けるため
int age;
struct person* next;
};

struct person* addList(char* name, int age, struct person* head){
struct person* list;
/* メモリ確保 */
if((list = (struct person*)malloc(sizeof(struct person))) == NULL){
printf("malloc error!\n");
return NULL;
}
strcpy(list->name, name);
list->age = age;
list->next = head;
head = list;

return head;
}


229 名前:aho mailto:sage [2007/11/10(土) 21:35:14 ]
>>228
printf("type 'q' to exit\n");
while(fgets(buf, sizeof(buf), stdin)){

/* 改行コードを取り除く */
char* sep = rindex(buf,'\n');
if(!sep)
continue;
*sep = '\0';
if(!strcmp(buf, "q"))
break;
/* カンマまでをbufに格納 */
sep = rindex(buf, ',');
if(!sep)
continue;
*sep = '\0';
name = buf;
age = atoi(++sep);

head = addList(name, age, head);
}
何かあれば言ってちゃぶだい!

230 名前:デフォルトの名無しさん [2007/11/10(土) 21:36:29 ]
数独で16個の初期配置で解けるか調べるプログラム

問題として成立する初期配置の数字の最少個数はまだ結論が出ていないが、非対称の物では17個(初出・パズラー187号 1997年)のものが確認されている。
ja.wikipedia.org/wiki/%E6%95%B0%E7%8B%AC



231 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 21:43:01 ]
>>226
#!/usr/local/perl
$a = <STDIN>;$r = <STDIN>;$n = <STDIN>;
print $a*$n if($r == 1);print $a*(1-$r**$n)/(1-$r) if($r != 1);


232 名前:デフォルトの名無しさん [2007/11/10(土) 21:46:45 ]
質問テンプレってどこにあるんですか?
直接とべるようにしてくれたらうれしいです

233 名前:デフォルトの名無しさん [2007/11/10(土) 21:52:50 ]
等比数列の初項aと公比rと項数nをキーボードから入力して、それらを画面に表示して最後にそれらの総和を表示する。
ただし、a,rは実数とする

234 名前:215 [2007/11/10(土) 21:55:25 ]
>>228
struct person{
char name[20]; //char*では'q'の影響を受けるため
int age;
struct person* next;
};
これはプログラム最初の6行目を書き直せということでしょうか?

addList()が何をしててmain内でどうすればいいのか分かりません。

235 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 22:09:21 ]
宿題を書き込んだ人がこのスレの流れをみてるんだけど
難易度高いやつからくそ低い宿題まで書き込まれるんですね。。。

236 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 22:14:57 ]
>>232
俺が適当にテンプレを埋めて置く、間違ってる所は指摘しろ
【質問テンプレ】
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
等比数列の初項aと公比rと項数nをキーボードから入力して、それらを画面に表示して最後にそれらの総和を表示する。
ただし、a,rは実数とする
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: BCC
 [3.3] 言語: C
[4] 期限: 2007年11月11日零時零分零秒
[5] その他の制限: 普通に作ってってね。簡単すぎるからって
ふざけて物凄いコード書かないでね。

237 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 22:18:05 ]
>>236
#include<stdio.h>

int main(void){
double a, r, an, sum;
int i, n;

printf("等比数列の初項 a (実数) を入力して下さい : ");
scanf("%lf", &a);
printf("等比数列の公比 r (実数) を入力して下さい : ");
scanf("%lf", &r);
printf("等比数列の項数 n (整数) を入力して下さい : ");
scanf("%d", &n);

printf("a=%g r=%g n=%d\n", a, r, n);

an=a;sum=0.0;
for(i=0;i<n;i++){
sum+=an;
an*=r;
}
printf("sum=%g\n", sum);

return 0;
}

238 名前:aho mailto:sage [2007/11/10(土) 22:20:42 ]
>>234
addList()については以下のページを参照。わかりやすくかいてある。
www9.plala.or.jp/sgwr-t/c/sec15-5.html

--構造体のメンバnameの型変更について--
while()内にif(!strcmp(buf, "q"))
ていう部分があるでしょ?
そこはbufが"q"だったらループを抜けるってこと。
ここまではOKっすよね?

この後の文の
name = buf;
が厄介なのである。
nameの先頭ポインタにbufの先頭ポインタを代入している。
これをaddList()内でstrcpyの代わりにやることが出来ない。
nameはbufのポインタを参照しているから、bufが変わればnameも一緒に変わってしまう。

説明下手でごめんちゃい。

239 名前:デフォルトの名無しさん [2007/11/10(土) 22:20:43 ]
巡回セールス問題を解くプログラムを順列を用いて書きたいのですけど
for(i = 0; i < n; i++) used[i]=NO;
perm(0);

return(0);
}

void perm(int d)
{
int i,j;
int b[MAXN];
int s = adj[a[0]][a[n-1]];

if(d == n){
for(i = 0; i < n-1; i++){
s+=adj[a[i]][a[i+1]];
}
}

else {
for (i = 0; i < n; i++) {
if (used[i] == NO) {
a[d] = i;
used[i] = YES;
perm(d + 1);
used[i] = NO;
}
}
}
}
これだけだとただの列挙になってしまいます
最小値だけをだすにはどうしたらいいでしょうか?

240 名前:aho mailto:sage [2007/11/10(土) 22:22:15 ]
>>235
その通り。
その中から暇人達がやりたい問題を選んでやるわけなのだよ、明智君。




241 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 22:26:14 ]
協力お願いします。
wwwww.2ch.net/test/read.cgi/news4vip/1194617474/

242 名前:215 mailto:sage [2007/11/10(土) 22:29:06 ]
>>238さん感謝です。
まだよく分かっていませんが考えてみます。
分からなかったらまた質問したいので215のリンクを貼りなおしました。

先生の元データ:
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5240.txt
自分の途中データ:
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5241.txt

たぶんまた来ますがよろしくお願いします。

243 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 22:29:53 ]
やりたい問題だけなのか。。。
175なんて理解不能な問題だしたおれってアホだな。。。
上の部分だけならなんとか計算できるレベルなのに
下にもあってしかも上と移動するなんてありえないな。。。

どう書いていけばいいのかわからないんだよね。。。

244 名前:aho mailto:sage [2007/11/10(土) 22:32:52 ]
>>175 >>243
もう一度upしてくれ!
ファイルが見つからん!

245 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 22:33:01 ]
>>175 なんて問題すら見えないんだが…
余程のエスパーでないと解きようも無い

246 名前:175 mailto:sage [2007/11/10(土) 22:52:39 ]
[1] 授業単元: 確率論
[2] 問題文:
toku.xdisc.net/cgi/up/vcc/nm12581.txt
ここに書きました。
移動50回するものとします。
図はこんな感じです。
toku.xdisc.net/cgi/up/vcc/nm12580.jpg

[3] 環境
 [3.1] OS: LINUX
 [3.2] 言語: C
[4] 期限: 11月11日
[5] その他の制限:
図の上の1,2,3を構造体配列struct gstate upnum[3]
図の下の10,11を構造体配列struct gstate downum[2]として。
構造体メンバnumに1,2,3,10,11をいれるように。

お願いします。







247 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 23:05:10 ]
>>246
gstateの定義は自由?

248 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 23:22:28 ]
>>246
なんだ 簡単じゃん

249 名前:175 mailto:sage [2007/11/10(土) 23:26:17 ]
自由でいいです。

まー図の状態数をもっと多くしたかったんですけど。

toku.xdisc.net/cgi/up/vcc/nm12583.jpg
こういう感じが本番なんですけどね。

250 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 23:27:36 ]
増えただけで考え方は全く同じ



251 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 23:34:24 ]
何かこれ有効グラフの最大流と最小カット問題みたいだな

252 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 23:40:15 ]
>>246
行列につっこめれば、ただの積ですむのに……






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<222KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef