質問するログイン新規登録

Q&A

0回答

103閲覧

Run Length法を用いた画像圧縮・復元(C言語)

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

プログラミング教育

プログラミング教育は、子どもから社会人までを対象にしたプログラミング学習支援、教材紹介、教え方の工夫などに関する投稿に使用されます。

0グッド

0クリップ

投稿2025/10/30 15:07

0

0

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;

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2025/10/30 21:49 編集

>ダイレクトを用いてプログラムの入力に与え リダイレクト、ですかね。 >上手く実行できない どのようなデータを入れたらどのような結果になるはずがどのような結果になって、ご自身では何処まで調査されたのでしょう。 teratail は添削とかデバッグを依頼する所ではないはずです。 結果的に添削やデバッグすることになるにしろ、ご自身で調べて何処の何が分からないのか、質問としての形を取る必要はあると思います。 1-2. 投稿前に自分で検索をして、できるところまで自分でやってみましょう https://teratail.com/help/question-tips#questionTips12 また、付けられるタグは、本件が何に関しての質問なのかを示すものです。 『プログラミング言語』や『プログラミング教育』は文字通り言語そのものや教育についての研究であるとか調査・学習ということで、具体的なc言語のプログラムの不具合の質問には合わないのではないでしょうか。
jimbe

2025/10/30 16:02 編集

見た感じでは、 ・1つ目のプログラムの出力と2つ目のプログラムの入力のフォーマットが合っていません。 ・2つ目の画素の scanf が『改行も空白文字の一つ』であることを考慮していません。
fana

2025/10/31 01:43

こんなところに質問している時間があるなら,自身でデバッグしたほうが早いと思います. (質問文書いたり,いちいち見に来て反応返したりとかいう労力とかが割に合わないのでは感.いそいでいるならなおさらに.) 処理過程が「こうなるハズ」というのが明瞭なデータ(例えば 2*3 くらいの画像データとか)でも用意して それを与えた際にあるべき動作をしているかを細かく確認してみばいいんじゃないでしょうか. それで変な(:想定と異なる)動作をしている箇所を見つけたならば,その時点でもう何をどうすれば良いのかがわかっちゃうのかもしれませんし.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問