無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
poi

無題

#1

投稿記事 by poi » 15年前

配列ファイル(下は、任意の数字)

 12
      ←空白
 315
 2132 
 23

を読み込み、

 1 322
2 113
  53
   2
  ↑
  空
  白

の転置行列(空白の行も、列に対応)をするプログラムは作成できるのでしょうか?

sizuma

Re:無題

#2

投稿記事 by sizuma » 15年前

できます。

non

Re:無題

#3

投稿記事 by non » 15年前

ちょっとわからない。
>配列ファイル
って何ですか?このような文字列が、全角文字で入っているファイルと考えていいのでしょうか?
数値は必ず、1桁なのでしょうか?行列の大きさは?ファイルを読んで、自動で判断する?
で、それを、転置行列を求めて、求めた後はどうするのでしょうか?

初級者

Re:無題

#4

投稿記事 by 初級者 » 15年前

入力データが行列の形になっているように見えません。

何行何列の行列なのでしょうか?

poi

Re:無題

#5

投稿記事 by poi » 15年前

>sizumaさん nonさん 初級者さん

回答ありがとうございます。


5X5の行列のサイズで、

「r.txt」に下のような数字が入っています。
(数字は1桁で半角、数字は手入力、空白の行もあり)

 1 2
      ←空白
 3 1 5
 2 1 3 2 1
 2 3

上記のファイルを読み込み、下記の数字に転置して、「w.txt」に下記の数字を
書き込むことを行っていますが、上手く転置できない状態です。

 1 3 2 2
2 1 1 3
5 3
    2
1
  ↑
  空
  白

/****************ファイル読み込み********************/
file=fopen("r.txt","r");
for(i=0; i<PI_H; i++){
for(j=0; j<PI_W; j++){
fscanf(file,"%d", &PixelData[j]);
}
}
fclose(file);
/*******************ファイル書き込み****************/
file=fopen("w.txt","w");
for(j=0; j<PI_W; j++){
for(i=1+j; i<PI_H; i++){
buf=PixelData[j];
PixelData[j]=PixelData[j];
PixelData[j]=buf;
if(PixelData[j]>0)fprintf(file,"%d ",PixelData[j]);
}fprintf(file,"\n");
}
fclose(file);

を作成しr.txtの数字を入力しましたが、

123152132123
13
315
21321
23
11
11
2
と出力されました。

Mist

Re:無題

#6

投稿記事 by Mist » 15年前

preタグ使用しないと半角空白、タブは削除されちゃうから見づらくて。
 1   3 2 2
   2   1 1 3
       5 3
       2
         1

/****************ファイル読み込み********************/
    file=fopen("r.txt","r");
    for(i=0; i<PI_H; i++){
        for(j=0; j<PI_W; j++){
            fscanf(file,"%d", &PixelData[j]);
        }
    }
    fclose(file);
/*******************ファイル書き込み****************/
    file=fopen("w.txt","w");
        for(j=0; j<PI_W; j++){
            for(i=1+j; i<PI_H; i++){
            buf=PixelData[j];
            PixelData[j]=PixelData[j];
            PixelData[j]=buf;
            if(PixelData[j]>0)fprintf(file,"%d ",PixelData[j]);
        }fprintf(file,"\n");
    }
    fclose(file);

バグ

Re:無題

#7

投稿記事 by バグ » 15年前

有効な値(r.txtファイルに書き込まれる値)が0の場合というのは有りうるのでしょうか?
文字のまま扱ってはいけないのでしょうか?
数値に置き換えなければいけないのでしょうか?

Mist

Re:無題

#8

投稿記事 by Mist » 15年前

添付テキストのような条件だったら動くソース。
参考にしてください。
#include <stdio.h>
#include <string.h>

#define PI_H    5
#define PI_W    5

int main(void)
{
    FILE    *file;
    char    PixelData[PI_H][PI_W];
    int     read, i, j;
    char    buf;

    memset(PixelData, ' ', sizeof(PixelData));

/****************ファイル読み込み********************/

    file=fopen("r.txt","r");

    for(i=0; i < PI_H; i++){
        for(j=0; ; j++){
            read = fgetc(file);
            if (read == '\n' || read == EOF) {
                break;
            }

            if (j < PI_W) {
                PixelData[j] = (char)read;
            }
        }
    }
    fclose(file);

/*******************入れ替え****************/

    for(j=0; j<PI_W; j++){
        for(i=1+j; i<PI_H; i++){
            buf=PixelData[j];
            PixelData[j]=PixelData[j];
            PixelData[j]=buf;
       }
    }

/*******************ファイル書き込み****************/
    file=fopen("w.txt","w");
    for(i=0; i<PI_H; i++){
        for(j=0; j<PI_W; j++){
            fprintf(file, "%c", PixelData[j]);
        }
        fprintf(file, "\n");
    }

    fclose(file);

    return 0;
}

たいちう

Re:無題

#9

投稿記事 by たいちう » 15年前

ファイル書き込みの前に、
for(i=0; i<PI_H; i++){
    for(j=0; j<PI_W; j++){
        printf("%d ", PixelData[j]);
    }
    printf("\n");
}


と追加してみれば、読み込みに失敗していることは明らか。
fgetsとsscanfを使うのが定石でしょう。例を探してみてください。

バグ

Re:無題

#10

投稿記事 by バグ » 15年前

fgetsとsscanfでは空白の後に数字があった場合に変換できないのでは?
Mistさんの取られたfgetcで一文字ずつチェックするしかないと思います。

たかぎ

Re:無題

#11

投稿記事 by たかぎ » 15年前

> fgetsとsscanfでは空白の後に数字があった場合に変換できないのでは?

やってやれないことはありませんね。

バグ

Re:無題

#12

投稿記事 by バグ » 15年前

>>たかぎさん
え?空白箇所を無効な値として判断できますか?(^_^;)
どうやるんでしょうか?

たかぎ

Re:無題

#13

投稿記事 by たかぎ » 15年前

極端な話、sscanf(str, "%c", &c) で1文字ずつ処理すればよいのです。
実際には、"%[^ ]"とか、もっと気の利いた書式も使えると思います。

poi

Re:無題

#14

投稿記事 by poi » 15年前

>Mistさん バグさん たかぎさん たいちうさん

みなさんのおかげで、先ほどプログラムが完成しました。


まことにありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る