←検索窓の楽しみ方
  ショッピングモール  掲示板ランキング


【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.4432

配列シャッフル
投稿者---C(2005/08/12 13:31:59)
www.chem.ucla.edu


以下の配列シャッフルですが、小数点を入れることができません。また、ファイルから自動的に1行づつ入力して計算させることもできません。
どなたかわかるかたいらっしゃたらどうぞよろしくお願いいたします。


#include <stdio.h>

#define N 2

char num_tbl[] = {1, 3, 4};

void genPermutation(int result[], int 

remained[], int n) {
    int selected, i;

    if (n<0) {
        for (i=0; i<=N; i++)
            putchar

(num_tbl[result[i]]);
        putchar('\n');
        return;
    }
    for (i=0; i<=n; i++) {
        selected = remained[i];
        result[n] = selected;
        remained[i] = 

remained[n];
        genPermutation(result, 

remained, n-1);
        remained[i] = selected;
    }

    return;
}

int main() {
    int i;
    int result[1+N], remained[1+N];

    for (i=0; i<=N; i++)
        remained[i] = i;

    genParmutation(result, remained, 

N);

    return 0;
}




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:配列シャッフル 4433 まきじ 2005/08/12 13:39:44
<子記事> Re:配列シャッフル 4434 C 2005/08/12 13:45:18


No.4433

Re:配列シャッフル
投稿者---まきじ(2005/08/12 13:39:44)


>以下の配列シャッフルですが、小数点を入れることができません。

double 型にすれば良い。

>また、ファイルから自動的に1行づつ入力して計算させることもできません。

fgets()


この投稿にコメントする

削除パスワード

No.4434

Re:配列シャッフル
投稿者---C(2005/08/12 13:45:18)
www.chem.ucla.edu


はい。doubleに変えて、putcharをprintfに変えたのですが。。。
うまくいきません。


この投稿にコメントする

削除パスワード

No.4435

Re:配列シャッフル
投稿者---まきじ(2005/08/12 14:08:07)


>うまくいきません。

どううまくいかないのでしょうか?
何を double に変えましたか?


この投稿にコメントする

削除パスワード

No.4436

Re:配列シャッフル
投稿者---C(2005/08/12 14:17:04)
www.chem.ucla.edu


以下のように書いてみたのですが。。。
(恥ずかしいソースをすいません。)



#include <stdio.h>

#define N 2

double num_tbl[] = {0.1, 0.1, 0.3, 0.4};

void genPermutation(int result[], int remained[], int n) {
    int selected, i;

    if (n<0) {
        for (i=0; i<=N; i++)
    printf ("num_tbl[result[i]]");
        printf ('\n');
        return;
    }
    for (i=0; i<=n; i++) {
        selected = remained[i];
        result[n] = selected;
        remained[i] = remained[n];
        genPermutation(result, remained, n-1);
        remained[i] = selected;
    }

    return;
}

int main() {
    int i;
    int result[1+N], remained[1+N];

    for (i=0; i<=N; i++)
        remained[i] = i;

    genParmutation(result, remained, N);

    return 0;
}




この投稿にコメントする

削除パスワード

No.4437

Re:配列シャッフル
投稿者---まきじ(2005/08/12 14:27:44)


>printf ("num_tbl[result[i]]");

printf ("%f",num_tbl[result[i]]);

>printf ('\n');

printf ("\n");

>genParmutation(result, remained, N);

genPermutation(result, remained, N);


この投稿にコメントする

削除パスワード

No.4438

ありがとうございました。
投稿者---C(2005/08/12 14:32:19)
www.chem.ucla.edu


ファイルから自動的に抽出するのも考えてみようと思います。
ありがとうございました。



この投稿にコメントする

削除パスワード

No.4443

ファイルから
投稿者---C(2005/08/12 16:55:50)
www.chem.ucla.edu


さきほどの件で、ファイルから1行とってpermutationさせようと考えていますが、うまくいきません。どなたかお助けください!!



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<math.h>
#define MAX_MOJISUU 10000
#define MAX_KOUMOKUSUU 6

int main(void){

    char filename[256]; // 読み込むファイル

名
    char buf[MAX_MOJISUU]; // ファイルか

ら一行分読み込むバッファ
    char* p[MAX_KOUMOKUSUU+1]; // 各

項目を指すポインタ配列
    int i, j, k, l; // カウンタ用変数
    int len; // 読み込んだ文字列の長さ

    FILE *fp;
   

    // ファイル名取得
  // printf("filename = ");
   //gets( filename );

    // ファイルオープン
    strcpy(filename,"0.csv");
    fp = fopen( filename, "r" );
    if( fp != NULL )
    {
        i = 1;
        while( fgets( buf, MAX_MOJISUU, fp ) 

!= NULL )
        {
            // 終端が改行コードの場合は削除
            len = strlen( buf );
            if( buf[len-1] == '\n' ) buf[len-1] = 

'\0';
            
            // 1行表示
            printf("\n Line %d : %s\n", i++, buf 

);
         

            // 文字列の分解
            j = 0;
            p[j] = strtok( buf, ",");
            while( p[j] != NULL )
            {
                j++;
                p[j] = strtok( NULL,",");
            }

     
void genPermutation(int result[], int 

remained[], int n) {


    
               int selected, i;

    if (n<0) {
        
 for( k = 0; k<j; k++ ) 
            
printf("%.4f", buf);
        printf ("\n");
        return;
    }
    
      for (i=0; i<=n; i++) {
        selected = remained[i];
        result[n] = selected;
        remained[i] = 

remained[n];
        genPermutation(result, 

remained, n-1);
        remained[i] = selected;
    }

    return;
}

int main() {
    int i;
    int result[1+k], remained[1+k];

    for (i=0; i<=k; i++)
        remained[i] = i;

    genPermutation(result, remained, 

k);

    return 0;
}


   
   }
    fclose( fp );
    getchar();
    return 0;
}
}





この投稿にコメントする

削除パスワード

No.4444

Re:ファイルから
投稿者---Blue(2005/08/12 17:01:47)


なんかソースがメチャクチャです。
main文が2つあるし、もう一度見直して投稿してください。

# なんかへんなとこで改行されているしね。。。



この投稿にコメントする

削除パスワード

No.4445

Re:ファイルから
投稿者---とおり(2005/08/12 17:03:53)


掲示板の注意書きをちゃんと読んで下さい。

※環境(OSとコンパイラ)や症状は具体的に詳しく!

うまく行かないを具体的に!!


この投稿にコメントする

削除パスワード

No.4446

Re:ファイルから
投稿者---C(2005/08/12 17:46:20)
www.chem.ucla.edu


申し訳ございません。C言語初心者です。
ファイルから一行づつよみとるソースと、順列を計算するソースはありましたが、二つをあわせたら上記のようなソースになってしまいました。。。
すいません。


この投稿にコメントする

削除パスワード

No.4447

Re:ファイルから
投稿者---まきじ(2005/08/12 17:50:40)


>ファイルから一行づつよみとるソースと、順列を計算するソースはありましたが、二つをあわせたら上記のようなソースになってしまいました。。。

合わせたって、一つのファイルにコピーしただけの様に見えます。

配列をシャッフルしたいのか?
全通りの順列を表示したいのか?

どちらですか?


この投稿にコメントする

削除パスワード

No.4449

Re:ファイルから
投稿者---C(2005/08/12 18:03:55)
www.chem.ucla.edu



実は、配列をシャッフルし、全通りの順列を表示したいんです。
ご迷惑おかけします。



この投稿にコメントする

削除パスワード

No.4450

Re:ファイルから
投稿者---C(2005/08/12 19:59:11)
www.chem.ucla.edu


すこしわがままな質問でした。申し訳ありません。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧




掲示板提供:Real Integrity