2つのプログラムを作成したいのですが、上手く実行できないので添削していただきたいです。
締め切りが近いので、早めのご回答をしていただけると幸いです。
今回扱うCRAファイルは1行につき1つのデータとする。
1行目:「CA」という文字列と決められてる
2行目:色モード(1は白黒濃淡画像)
3行目:最大輝度
4行目:画面の横サイズ
5行目:画面の縦サイズ
6行目:第1画素の耀度
7行目:第2画素の輝度
…
CRA形式はテキストファイルのため、ダイレクトを用いてプログラムの入力に与え、scanfで読み込むことができる。しかし、CRAファイルの1行目は数値ではないため、3個のfgetc(stdin)を書き、1行目を読み捨てた後はscanfで2行目以降の数値を読み込む。
①CRA形式の画像を入力に与え、データ圧縮を適用した結果を出力するプログラム
#include <stdio.h>
int main(void){
int mode, max, yoko, tate, i, count=1, now, next; fgetc(stdin); fgetc(stdin); fgetc(stdin); scanf("%d",&mode); scanf("%d",&max); scanf("%d",&yoko); scanf("%d",&tate); scanf("%d",&now); for(i=1; i<yoko*tate; i++){ scanf("%d",&next); if(now==next){ count++; }else{ if(count==1){ printf("%d\n",now); }else{ printf("%d %d\n",now, count); } now=next; count=1; } } if(count==1){ printf("%d\n",now); }else{ printf("%d %d\n",now, count); } return 0;
}
②①の出力結果を入力に与え、元のCRA形式の画像データを出力するプログラム
#include <stdio.h>
int main(void) {
int mode, max, yoko, tate;
int value, count;
int i, j;
// 圧縮データのヘッダ読み込み scanf("%d", &mode); scanf("%d", &max); scanf("%d", &yoko); scanf("%d", &tate); // CRA形式のヘッダ出力 printf("CRA\n"); printf("%d\n", mode); printf("%d\n", max); printf("%d\n", yoko); printf("%d\n", tate); // 画像復元 i = 0; // 出力した画素数 while (i < yoko * tate) { int res = scanf("%d %d", &value, &count); // 圧縮データ読み込み if (res == 1) { // countが省略されている場合 count = 1; } // count回画素を出力 for (j = 0; j < count; j++) { printf("%d\n", value); i++; } } return 0;
}
あなたの回答
tips
プレビュー